多线程VS多进程

举报
Jet Ding 发表于 2020/09/29 11:44:44 2020/09/29
【摘要】 多进程系统拥有一个或者以上的CPU。这些CPU被添加到系统中提高系统的计算速度。每个CPU都有自己的寄存器和主存储器。

1      什么是多进程?

多进程系统拥有一个或者以上的CPU。这些CPU被添加到系统中提高系统的计算速度。每个CPU都有自己的寄存器和主存储器。

由于每个CPU都是独立的,可能会发生一个CPU无事可做的情况,而另一个CPU可能会因为特定的任务而超负荷运转。在这种情况下,多进程技术就会在CPU之间动态共享资源。

单CPU的情况下执行多进程,需要切换CPU调度

2      什么是多线程?

多线程是一种程序执行技术,它允许一个进程拥有多个代码段这些代码段在该进程的"上下文"中并发运行。多线程应用程序是指有两个或多个线程并发运行的应用程序。

3      多进程的基本特征

1.         多进程是根据其内存的组织方式来分类的。

2.         多进程可以提高系统的可靠性

3.         多进程可以通过将程序分解为并行的可执行任务来提高性能。

4      多线程的基本特征

1.         在多线程过程中,每个线程都是相互平行运行的。

2.         线程不允许分割内存区域。因此,它可以节省内存,并提供更好的应用性能。

 

5     进程和线程的对比

对比参数

多进程系统

多线程系统

基本

多进程帮助提高计算能力。

多线程帮助单个进程提高计算能力。

运行

允许同时执行多个进程。

一个进程的多个线程是并发执行的。

CPU 切换

在多进程中,CPU必须在多个程序之间切换,看起来就像多个程序同时运行。

在多线程中,CPU必须在多个线程之间进行切换,看起来所有线程都在同时运行。

创建

进程的创建是缓慢的,因为是消耗资源的。

线程的创建相比进程是节约时间和资源的。

分类

多进程可以是对称的,也可以是非对称的。

多线程没有这些分类。

内存

多进程为每个进程分配单独的内存和资源。

属于同一进程的多线程与该进程共享相同的内存和资源。

拣选对象

多进程依靠拣选内存中的对象来发送给其他进程。

多线程避免了拣选。

程序

多进程系统可以执行多个进程任务。

多线程系统执行同一进程的多个线程任务。

时间开销

减少了作业处理时间。

减少了工作处理时间。


6      多进程的优势

1.         代码通常是直接的。

2.         充分利用了多个CPU及其内核的优势

3.         帮助你避免CPythonGIL限制。

4.         移除同步基元(除非你使用共享内存)。

5.         子进程大多是可中断/可杀死的。

6.         它可以帮助你在较短的时间内完成工作。

7.         当需要非常高的速度来处理大量数据时,应该使用这类系统。

8.         多处理系统与单处理器系统相比,可以节省资金,因为处理器可以共享外围设备和电力资源。

7      多线程的优势

1.         线程共享同一个地址空间

2.         线程属于轻量级,内存占用少。

3.         线程之间的通信成本很低。

4.         从另一个上下文访问内存状态更容易

5.         它允许你轻松地制作响应式用户界面

6.         I/O绑定应用的理想选择

7.         在共享内存内的两个线程之间切换所需时间较少,终止时间较少

8.         线程的启动速度比进程快,任务切换也快。

9.         所有线程共享一个进程内存池。

10.     在现有进程中创建一个新线程比创建一个新进程所需的时间更短。

8      多进程的缺点

1.         IPC(Inter-Process Communication)相当复杂,开销较大。

2.         具有较大的内存占用率

9      多线程的缺点

1.         多线程系统是不可中断的

2.         如果不遵循命令队列和消息泵的模式,需要手动进行同步。

3.         代码通常比较难理解,增加了竞赛条件的可能性。

10 关键差异

1.         多进程系统一般在两个以上的处理器时可以提高计算性能,而多线程是一种允许一个进程拥有多个代码段的程序执行技术。

2.         多进程提高了系统的可靠性,而在多线程过程中,每个线程都是相互并行运行的。

3.         多进程可以帮助你提高计算能力,而多线程则可以帮助你创建单个进程的计算线程。

4.         在多进程中,一个进程的创建,是缓慢的,因为需要申请资源,而在多线程中,线程的创建是节约时间和资源的。

5.         多线程避免了pickling,而多处理则是依靠pickling内存中的对象来发送给其他进程。

6.         多进程系统耗时较少,而对于作业处理来说,则需要适量的时间。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。