进程与线程异同&&系统级进程与用户级进程异同

进程与线程异同

一个程序至少有一个进程,一个进程至少有一个线程.从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

调度性:在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位为进程。而在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位

并发性:在引入线程OS中,不仅进程间可以并发执行,而且在一个进程的多个线程间也可以并发执行,因而它比传统的OS具有更好的并发性。

拥有资源:在这两种的OS中,拥有资源的基本单位都是进程。线程除了一点在运行中必不可少的资源(线程控制块、程序计数器,一组寄存器和堆栈等)外,本身不拥有系统资源。但它可访问其隶属进程的资源。

开销:由于创建或撤销进程时,系统都要为之分配和回收资源,如内存空间和I/O设备等;进程切换时所要保存和设置的现场信息也要明显地多于线程,因此,OS在创建、撤销和切换进程时所付出的开销将明显大于线程。另外,由于隶属于同一个进程的多个线程共享同一地址空间和该进程的所有已打开文件,从而使它们之间的同步和通信的实现也比进程更方便。

 

内核支持线程与用户级线程异同

内核支持线程是在内核支持下实现的,即每个线程的线程控制块设置在内核中,所有对线程的操作(创建、撤销和切换等),都是通过系统功能调用由内核中的相应处理程序完成。而用户级线程仅存在于用户空间中,即每个线程的控制块设置在用户空间中,所有对线程的操作也在用户空间中完成,而无需内核的帮助。

内核支持:用户级线程可在一个不支持线程的OS中实现,而内核支持线程则不然,它需要得到OS内核的支持。

处理器的分配:在多处理机的环境下,对纯粹的用户级线程来说,内核一次只为一个进程分配一个处理器,即进程无法享用多处理器带来的好处;而在设置有内涵支持线程时,内核可调度一个应用中的多个进程同时在多个处理器上并行运行,从而提高程序的执行速度和效率。

调度和线程执行时间:对设置有内核支持线程的系统,其调度方式和算法与进程的调度十分相似,只不过调度的单位是线程;而对只设置了用户级线程的系统,调度的单位则仍为进程。因此,在条件相同的情况下,内核支持的线程通常比用户级线程得到更多的CPU执行时间。

切换速度。用户级线程的切换,通常发生在一个应用程序的诸线程间,由于不需要陷入内核,而且切换的规则也简单,因此切换速度比内核支持线程至少快一个数量级。

系统调用:在典型的OS中,许多系统调用都会引起阻塞。当一个用户级线程执行这些系统调用时,被阻塞的将是整个进程;而当一个内存支持线程执行这些系统调用时,内核只阻塞这个线程,但仍可调度其所属进程的其他线程执行。

 

你可能感兴趣的:(Linux探析)