IO密集型和计算密集型
2024-10-12 06:15:20
我们常说的多任务或者单任务分为两种:
IO密集型的任务
计算密集型的任务
IO密集型的任务或:
有阻塞的状态,就是不一直会运行CPU(中间就一个等待状态,就告诉CPU 等待状态,这个就叫IO密集型),例如:sleep 状态等
有阻塞的状态,就是不一直会运行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)
最新文章
- spring帝国-开篇
- Python OOP(面向对象编程)
- Redis在windows下安装过程
- eclipse 引用项目(转)
- [WP8.1UI控件编程]Windows Phone XAML页面的编译
- 永不消逝的电波(二)HackRF入门:家用无线门铃信号重放
- Selenium2学习-000-Selenium2初识
- HDU1002 -A + B Problem II(大数a+b)
- CCLablettf读取显示xml文件内容显示中文
- java里的静态变量是放在了堆内存还是栈内存?
- JS~字符串长度判断,超出进行自动截取(支持中文)
- C#导出数据到Excel通用的方法类
- 【转】Nginx windows下搭建过程
- WebService之Axis2
- hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
- 设计模式之二十一:中介者模式(Mediator)
- python 安装包制作
- win7下配置Tomcat
- Mysql 表 创建 / 删除(基础3)
- [Swift]lower_bound和upper_bound
热门文章
- Core Json 序列化相关问题
- 自动化测试-10.selenium的iframe与Frame
- C# 网络通信功能 同步数据交互开发
- 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error
- Python全栈之路----常用模块学习----模块的种类和导入方法
- Python数据存储:pickle模块的使用讲解
- HTML5操作麦克风获取音频数据(WAV)的一些基础技能
- 在Win10 Anaconda中安装Tensorflow
- Flask--SQLAlchemy--基本查询备忘
- C#编程经验-function advanced params