我们常说的多任务或者单任务分为两种:
    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)

IO密集型和计算密集型的更多相关文章

  1. 【System】I/O密集型和CPU密集型工作负载之间有什么区别

    CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/ ...

  2. CPU计算密集型和IO密集型

    CPU计算密集型和IO密集型 第一种任务的类型是计算密集型任务,其特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力.这种计算密集型任务虽然也可以用多 ...

  3. 计算密集型和 io 密集型项目的使用场景分析和代码演示

    from threading import Thread from multiprocessing import Process import time 计算密集型 def work1(): res= ...

  4. Java多线程(二)关于多线程的CPU密集型和IO密集型这件事

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  5. CPU密集型和IO密集型(判断最大核心线程的最大线程数)

    CPU密集型和IO密集型(判断最大核心线程的最大线程数) CPU密集型 1.CPU密集型获取电脑CPU的最大核数,几核,最大线程数就是几Runtime.getRuntime().availablePr ...

  6. 题外话:计算密集型 vs IO密集型

    我们把任务分为计算密集型和IO密集型,erlang作为IO密集型的语言,适合网关等相关的场景,而对计算达到某一量级后,可能处理效率下降的很明显. erlang不适合数值计算.erlang是解释型的,虽 ...

  7. Python IO密集型任务、计算密集型任务,以及多线程、多进程

    对于IO密集型任务: 直接执行用时:10.0333秒 多线程执行用时:4.0156秒 多进程执行用时:5.0182秒 说明多线程适合IO密集型任务. 对于计算密集型任务 直接执行用时:10.0273秒 ...

  8. IO密集型 计算密集型

    参考:https://www.cnblogs.com/zhangyux/p/6195860.html 参考:廖雪峰 协程 gevent IO密集型任务指的是磁盘IO或者网络IO占主要的任务,计算量很小 ...

  9. [Python]IO密集型任务 VS 计算密集型任务

    所谓IO密集型任务,是指磁盘IO.网络IO占主要的任务,计算量很小.比如请求网页.读写文件等.当然我们在Python中可以利用sleep达到IO密集型任务的目的. 所谓计算密集型任务,是指CPU计算占 ...

随机推荐

  1. nodejs - 1)上传图片 ,并显示 , 2)模块 formidable

    1.代码: 1-1: 入口文件: index.js var server = require('./server'); var router = require("./router" ...

  2. js初识1

    JavaScript 1.定义:可以嵌入HTML文档,载体是浏览器,解释型脚本语言 基于对象和事件驱动 2.注释方式 1.// 2./**/ 3./** */文档注释,API就是这么生成的. 3.引入 ...

  3. day05 None类型

    None:空类型 表示该值是一个空对象,既不是0也不是" ",判断时候都为False

  4. Win下更新pip出现OSError:[WinError17]与PerrmissionError:[WinError5]及解决

    环境:Win7 64位,python3.6.0 我在准备用pip装东西的时候,在cmd里先更新了一下pip,大概是9.0.1更新到9.0. 尝试更新pip命令: pip install --upgra ...

  5. e充电加密破解

    def encrypt(self,stationId ): keys = 'F29E0E39-98E4-F4CC318443' encrypt_obj = pyDes.triple_des(keys, ...

  6. oracle-企业信息化

    http://www.itpub.net/thread-1873735-1-1.html        OCP考试心得 http://blog.csdn.net/rlhua/article/detai ...

  7. Dynamics 365 CRM 添加自定义按钮

    在添加自定义按钮之前,我们需要下载这个工具 RibbonWorkbench, 它是专门针对自定义命令栏和Ribbon区域. 下载之后是一个zip压缩包. 怎样安装RibbonWorkbench: Se ...

  8. Centos6.8通过yum安装mysql5.7 centos7.5适用

    1.安装mysql的yum源 a.下载配置mysql的yum源的rpm包 根据上面3张图片中的操作下载下来的rpm文件可以通过如下命令获取: wget https://dev.mysql.com/ge ...

  9. 问题 Windows7VMware14安装虚拟机时出现 此主机不支持虚拟化实际模式。需要具备 Intel“VMX 不受限客户机”功能才能在 Intel 处理器上运行此虚拟机。 模块“CPUIDEarly”启动失败。

    问题 Windows7VMware14安装虚拟机时出现 此主机不支持虚拟化实际模式.需要具备 Intel“VMX 不受限客户机”功能才能在 Intel 处理器上运行此虚拟机. 模块“CPUIDEarl ...

  10. svn安装和使用

    https://www.cnblogs.com/webStyle/p/3696003.html