进程与线程

1.进程与线程区别

(1)进程是具有一定独立功能的程序关于某个数据聚合上的一次运行活动,是系统进行资源分配和调度的一个独立单位;

        线程是CPU调度和分派的基本单位,基本上不拥有系统资源(除程序计数器、一组寄存器和栈)

        每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口;线程不能独立执行,必须存在应用程序中,一个应用程序有多个线程,并没有将多个线程看做多个独立的应用

        一个程序至少一个进程,一个进程至少一个线程

(2)线程可以创建和撤销另一个线程,一个线程死掉等于整个进程死掉当一个线程向非法地址读取或者写入,无法确认这个操作是否会影响同一进程中的其它线程,所以只能是整个进程一起崩溃。;一个进程崩溃后,在保护模式下不会对其他进程产生影响。

        同一个进程中的多个线程之间可以并发执行;线程只是一个进程中的不同执行路径

(3)进程有独立的地址空间有自己的内存线程没有单独的地址空间,线程与同进程中的其他线程共享数据,但有自己的堆栈和局部变量。

(4)线程有自己的私有属性TCB,线程id,寄存器,硬件上下文(保存当前进程运行的 cpu寄存器,载入下一个要运行的进程的cpu寄存器配置),线程的创建调用pthread_create,线程结束同一进程中其他线程不受影响

                线程控制块TCB(Thread Control Block):暂且将线程控制块理解为进程控制块的组成和附属

        进程有自己的私有属性进程控制块PCB,进程的创建调用用fork或者vfork,进程结束其所有线程被销毁

                进程控制块PCB(Processing Control Block):包括进程标志信息,处理器状态信息,进程控制信息。系统建立进程时会建立该进程的PCB,撤销会撤销其PCB,PCB是进程的具体物理标志和体现。程序段,相关数据段和PCB三部分构成了进程实体。

        所以多进程的程序比多线程的程序健壮,但在进程切换时,耗费资源较大,效率差。

(5)进程只能由父进程建立,挂起(等待/阻塞)命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出;

        线程由于贡献资源,需要通信和同步机制,线程可以创建其他线程,但线程间不存在父子关系。

2.线程比进程具有哪些优势?

【引用】

        多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。


        多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

    多线程(优:“节俭”的多任务操作;多线程间切换快;通讯方便;适合开发cpu性能/缺:程序设计易出错,性能有瓶颈):

                在同一地址空间内,线程间切换所需时间少,只需修改线程控制表或队列,不涉及地址空间和其他工作;无需跨进程边界; 程序逻辑和控制方式简单; 所有线程可以直接共享内存和变量等(增加通讯的有效性,由于共享主存和文件,无需内核参与); 线程方式消耗的总资源比进程方式好;

                每个线程与主程序共用地址空间,受限于2GB地址空间( 到达一定的线程数程度后,即使再增加CPU也无法提高性能); 线程之间的同步和加锁控制比较麻烦;一个线程的崩溃可能影响到整个程序的稳定性;线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

    多进程(优:稳定,不怕崩溃;容易提升性能,加cpu/缺:内存不共享,通讯麻烦;调度切换消耗资源):

                每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;通过增加CPU,就可以容易扩充性能;可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系; 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

                逻辑控制复杂,需要和主程序交互;进程间通信要求内核参与,以提供通讯机制和保护机制,需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算;多进程调度开销比较大;

    线程适合于在SMP机器上(是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构)运行,进程可以跨机器运行

3.什么时候用多进程,什么时候用多线程?

多线程:需要频繁创建销毁;需要进行大量计算;多核分布

多进程:要扩展到多机分布


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值