多线程和多进程

参考链接:https://blog.csdn.net/weixin_63956681/article/details/121275107

1.区别

多进程和多线程主要区别是:线程是进程的子集,一个进程可能由多个线程组成。
(1)多进程的数据是分开的、共享复杂,需要用IPC,但同步简单;多线程共享进程数据、共享简单,但同步复杂。
(2)在Linux下编程多用多进程少用多线程编程。多线程比多进程成本低,但性能更差。
ps:进程是一个线程池,同一个进程里的资源,线程可以直接的访问,进程在资源就一直在。
进程可以看成各个不同的池,相互之间要通过媒介才能访问,进程退出后,资源会被父进程或系统回收。

2.多进程优缺点

多进程优点:

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

2、通过增加CPU,就可以扩充性能;

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

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

多进程缺点:

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

2、需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算。多进程调度开销比较大;

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

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

3.多线程优缺点

1、无需跨进程边界;

2、程序逻辑和控制方式简答;

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

4、线程方式消耗的总资源比进程方式好。

多线程缺点:

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

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

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

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

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



并发与并行的区别?
(1)并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
(2)并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
(3)在一台处理器上“同时”(这个同时实际上市交替“”)处理多个任务,在多台处理器上同时处理多个任务




全部评论

相关推荐

11-29 11:21
门头沟学院 Java
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
2
10
分享
牛客网
牛客企业服务