linux *** 作系统多进程和多线程的区别

linux *** 作系统多进程和多线程的区别,第1张

进程:运行中的程序,-->执行过程称之为进程线程:线程是轻量级的进程,是进程中的一条执行序列,一个进程至少有一条线程。 多线程优点:①无需跨进程边界②程序逻辑和控制方式简单③所有线程可以直接共享内存和变量④线程方式消耗的总资源比进程少。多进程优点:①每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系②通过增加CPU就可以容易扩充性能③可以尽量减少线程加锁/解锁的影响,极大提高性能。多线程缺点:①每条线程与主程序共用地址空间,大小受限②线程之间的同步和加锁比较麻烦③一个线程的崩溃可能影响到整个程序的稳定性④到达一定的线程数之后,即使在增加CPU也无法提高性能。多进程缺点:①逻辑控制复杂,需要和主程序交互②需要跨进程边界,如果有大数据传输,不适合③多进程调度开销比较大。Linux系统中多进程和多线程的区别是什么?1、多进程中数据共享复杂、同步简单而多线程中数据共享简单、同步复杂。2、多进程占用内存多、切换复杂、速度慢、CPU利用率低而多线程占用内存少、切换简单、CPU利用率高。3、多进程的编程简单、调试简单而多线程的编程复杂、调试复杂。

IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。

如果是UNIX/linux环境,采用多线程没必要。

多线程比多进程性能高?误导!

应该说,多线程比多进程成本低,但性能更低。

在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。

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

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

我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。

高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

多线程的优点:

无需跨进程边界;

程序逻辑和控制方式简单;

所有线程可以直接共享内存和变量等;

线程方式消耗的总资源比进程方式好;

多线程缺点:

每个线程与主程序共用地址空间,受限于2GB地址空间;

线程之间的同步和加锁控制比较麻烦;

一个线程的崩溃可能影响到整个程序的稳定性;

到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

多进程优点:

每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

通过增加CPU,就可以容易扩充性能;

可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

多线程缺点:

逻辑控制复杂,需要和主程序交互;

需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算

多进程调度开销比较大;

最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8305240.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存