Python 多线程、多进程 (三)之 线程进程对比、多进程 您所在的位置:网站首页 python多线程和多进程的区别 Python 多线程、多进程 (三)之 线程进程对比、多进程

Python 多线程、多进程 (三)之 线程进程对比、多进程

#Python 多线程、多进程 (三)之 线程进程对比、多进程| 来源: 网络整理| 查看: 265

Python 多线程、多进程 (一)之 源码执行流程、GIL Python 多线程、多进程 (二)之 多线程、同步、通信 Python 多线程、多进程 (三)之 线程进程对比、多线程

一、多线程与多进程的对比

在之前简单的提过,CPython中的GIL使得同一时刻只能有一个线程运行,即并发执行。并且即使是多核CPU,GIL使得同一个进程中的多个线程也无法映射到多个CPU上运行,这么做最初是为了安全着想,慢慢的也成为了限制CPython性能的问题。 一个线程想要执行,就必须得到GIL,否则就不能拿到CPU资源。但是也不是说一个线程在拿到CPU资源后就一劳永逸,在执行的过程中GIL可能会释放并被其他线程获取,所以说其它的线程会与本线程竞争CPU资源,线程是抢占式执行的。具体可在 understand GIL中看到,[传送门]。 多线程在python2中:当一个线程进行I/O的时候会释放锁,另外当ticks计数达到100(ticks可以看作是Python自身的一个计数器,也可对比着字节码指令理解,专门做用于GIL,每次释放后归零,这个计数可以通过 sys.setcheckinterval 来调整)。锁释放之后,就涉及到线程的调度,线程的锁进行,线程的切换。这是会消耗CPU资源,因此会造成程序性能问题和等待时延。另外由于线程共享内存的问题,没有进程安全性高。 但是对于多进程,GIL就无法限制,多个进程可以再多个CPU上运行,充分利用多核优势。事情往往是相对的,虽然可以充分利用多核优势,但是进程之的创建和调度却比线程的代价更高。 所以选择多线程还是多进程,主要还是看怎样权衡代价,什么样的情况。

1、CPU密集代码

下面来利用斐波那契数列模拟CPU密集运算。

def fib(n): # 求斐波那契数列的第n个值 if n


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有