我们常说的多任务或者单任务分为两种:
IO密集型的任务
计算密集型的任务
这个上面代表了IO密集型.
反过来没有等待状态就是计算密集型,从上到下执行,没有任何等待
cpython无法同时利用多个cpu运行:
我们用的主流python叫cpython,在同一时刻,多个线程运行是相互抢占资源允许的,cpython无法把线程分配到多个cpu运行,就造成了计算密集型无法使用多个cpu 同时运行.这是由于cpython在运行的时候就加了一把锁(GIL),这是一个历史问题.
说白了python是没有多线程,因为同一时刻只能运行一个线程(多个线程分配到多个cpu运行,才是真正意义上面多线程,python无法做到.)
总结:
如果任务是IO密集型的,可以使用多线程(阻塞等待时,就释放GIL
,给另一个线程执行的机会)
如果是计算密集型的,无法使用多线程(如果遇到cpu密集型
的线程,一直占用cpu
,不会被I/O
阻塞,是不是其它线程就没有机会执行了呢? 其实不是,为了避免这种情况,我们前面说过有系统切换cpu轮询时间方式https://www.cnblogs.com/ajaxa/p/9105107.html)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。