标签:自己 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