Python3中多进程和多线程的理论相关

2018-10-30  本文已影响0人  艾胖胖胖

一、多任务

之所以需要使用多进程或者是多线程,归根结底就是为了进行多任务的处理。那么,多核CPU实现多任务原理和单核CPU的多任务原理是什么呢。

一般情况下任务数往往大于你的CPU核心数,所以会出现一颗CPU执行多个任务的情况。而这,又引出了并发和并行的概念

这里我们主要了解一下多进程和多线程的理论,后续将用代码介绍Python3的多进程和多线程

二、进程和线程

(1)线程共享内存空间;进程的内存是独立的

(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程

在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。所以,每个CPU在同一时间只能执行一个线程。而每个进程有各自独立的GIL,所以多进程的执行效率优于多线程(仅仅针对多核CPU而言)。

多核多线程比单核多线程更差,原因是单核下的多线程,每次释放GIL,唤醒的那个线程都能获取到GIL锁,所以能够无缝执行,但多核下,CPU0释放GIL后,其他CPU上的线程都会进行竞争,但GIL可能会马上又被CPU0拿到,导致其他几个CPU上被唤醒后的线程会醒着等待到切换时间后又进入待调度状态,这样会造成线程颠簸(thrashing),导致效率更低。

上一篇 下一篇

猜你喜欢

热点阅读