我们常说的多任务或者单任务分为两种:
    IO密集型的任务 
    计算密集型的任务
 
IO密集型的任务或:
有阻塞的状态,就是不一直会运行CPU(中间就一个等待状态,就告诉CPU 等待状态,这个就叫IO密集型),例如:sleep 状态等
 


这个上面代表了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)

最新文章

  1. spring帝国-开篇
  2. Python OOP(面向对象编程)
  3. Redis在windows下安装过程
  4. eclipse 引用项目(转)
  5. [WP8.1UI控件编程]Windows Phone XAML页面的编译
  6. 永不消逝的电波(二)HackRF入门:家用无线门铃信号重放
  7. Selenium2学习-000-Selenium2初识
  8. HDU1002 -A + B Problem II(大数a+b)
  9. CCLablettf读取显示xml文件内容显示中文
  10. java里的静态变量是放在了堆内存还是栈内存?
  11. JS~字符串长度判断,超出进行自动截取(支持中文)
  12. C#导出数据到Excel通用的方法类
  13. 【转】Nginx windows下搭建过程
  14. WebService之Axis2
  15. hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
  16. 设计模式之二十一:中介者模式(Mediator)
  17. python 安装包制作
  18. win7下配置Tomcat
  19. Mysql 表 创建 / 删除(基础3)
  20. [Swift]lower_bound和upper_bound

热门文章

  1. Core Json 序列化相关问题
  2. 自动化测试-10.selenium的iframe与Frame
  3. C# 网络通信功能 同步数据交互开发
  4. 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error
  5. Python全栈之路----常用模块学习----模块的种类和导入方法
  6. Python数据存储:pickle模块的使用讲解
  7. HTML5操作麦克风获取音频数据(WAV)的一些基础技能
  8. 在Win10 Anaconda中安装Tensorflow
  9. Flask--SQLAlchemy--基本查询备忘
  10. C#编程经验-function advanced params