Python线程指南,python线程

python中的多线程和JAVA中的多线程有什么区别吗?

Python线程指南,python线程


python是支持多线程的,但是python里的多线程是单cpu意义上的多线程,它和多cpu上的多线程有着本质的区别,这是因为python存在一个叫Global Interpreter Lock(GIL)全局解释器锁 。在解释器解释执行任何 Python 代码时,都需要先获得这把锁,也就是说在同一时刻内,只有一条线程可以在CPU中运行 。
但是python的多线程并不是毫无用处的 。当遇到 I/O 操作时会释放这把GIL锁,所以如果程序是一个IO密集型的程序,一个线程处在IO等待的时候另一个线程便可以取得锁并在CPU中运行,这时就发挥了多线程的作用 。但如果是纯计算的程序,没有 I/O 操作,那么只有取得GIL锁的线程可以在CPU中运行,其它的线程都处于等待状态,等待持有GIL 锁的线程的释放锁,也就相当于单线程在跑(而且上下文切换也会有所开销) 。
【Python线程指南,python线程】既然Python解释器是单线程的,还有进行多线程编程的必要吗?
Python线程指南,python线程


谢小秘书邀请~~先简单的回答:有必要 。首先,线程消耗的是CPU资源如果一个单线程内处理的业务逻辑会占用100%的CPU资源,那么,上了多线程也是没有用的 。但这种情况很少,高CPU占用一般出现在内存计算场景下,或者不良代码中错误的死循环 。正常情况下,CPU占用大于80%就需要进行代码或设计的优化,或者服务器增加资源了 。
多线程场景适用于解决慢速IO的问题我们绝大部分的计算,都会依赖于很多外部资源IO,如磁盘读写、网络访问、数据库访问... 这些资源的访问速度远远低于CPU的切换速度 。如果使用单线程进行操作时,就会长时间的等待IO的返回 。造成无效等待,性能低下 。所以即使是Python,为了充分利用CPU资源,提高性能,在通常的业务场景下使用多线程编程也是完全必要的 。
多核与Python多实例延续上面的问题,我们知道现在CPU大部分都是多核的,python为了避免单线程只能使用到一个核的问题,是有个multiprocessing 库的,允许创建子进程(子进程数一般与核心数相同),来充分利用CPU资源 。↓ ↓ ↓ 喜欢就点赞吧,欢迎各位评论指教,谢谢关注 -- 极迭代! 。

    推荐阅读