线程与进程区别

 

一.定义:

进程(process)是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。

 

进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。

二.区别:

 

一个程序至少有一个进程,一个进程至少有一个线程.。

1.多进程比多线程程序要健壮进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程没有自己单独的内存地址空间。一个线程死掉整个进程就死掉了。

2.进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大;

   线程一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进 程快,效率高但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

3.进程——资源分配的最小单位,线程——程序执行的最小单位。或者说是CPU调度和分派的基本单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。

4.体现在通信机制上面:正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点

5.体现在CPU系统上面:线程使得CPU系统更加有效,因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

   进程占用内存多,切换复杂,CPU利用率低; 线程占用内存少,切换简单,CPU利用率高。

6.线程的执行与进程是有区别的。每个独立的线程有有自己的一个程序入口,顺序执行序列和程序的出口,但是线程不能独立执行,必须依附与程序之中,      由应用程序提供多个线程的并发控制。

 

三.进程、用户线程、内核线程的区别和联系

 

  进程 用户线程(轻量级进程) 内核线程
代码段
数据段
描述符task_struct
用户空间堆栈 一个线程组共享一个用户空间 完全没有
内核空间堆栈
PID 独一无二的 一组线程共享一个

这里的有是指拥有独立的。

四.进程与线程的选择

取决以下几点:

1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。

2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应

3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;

4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;

5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

6.对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

posted @ 2017-11-18 17:22  Curo  阅读(260)  评论(0编辑  收藏  举报