码迷,mamicode.com
首页 > 编程语言 > 详细

线程与进程的区别

时间:2017-11-18 18:55:17      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:自己   sof   不同   架构   进程与线程   大于   地址空间   通信机制   它的   

 

一.定义:

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

 

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

二.区别:

 

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

1.进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程没有自己单独的内存地址空间。

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

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

3.进程——资源分配的最小单位,线程——程序执行的最小单位。是CPU调度和分派的基本单位。

4.体现在通信机制上面:正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。

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

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

6.体现在程序结构上:举一个简明易懂的列子:当我们使用进程的时候,我们不自主的使用if else嵌套来判断pid,使得程序结构繁琐,但是当我们使用线程的时候,基本上可以甩掉它,当然程序内部执行功能单元需要使用的时候还是要使用,所以线程对程序结构的改善有很大帮助。

 

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

 

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

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

四.进程与线程的选择

取决以下几点:

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

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

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

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

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

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

线程与进程的区别

标签:自己   sof   不同   架构   进程与线程   大于   地址空间   通信机制   它的   

原文地址:http://www.cnblogs.com/curo0119/p/7857322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!