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

摘要:
所谓IO密集型任务是指磁盘IO和网络IO的主要任务,计算量较小。例如请求网页、读取和写入文件等。当然,我们可以使用睡眠来实现Python中的IO密集型任务。所谓计算密集型任务是指CPU计算的主要任务。CPU始终处于满载状态。例如,在大列表中查找元素(这是不合理的)、复杂的加法、减法、乘法和除法等。多线程意味着在一个进程中启动多个线程来执行任务。一般来说,使用多线程可以实现并行的目标,但由于Python
  • 所谓IO密集型任务,是指磁盘IO、网络IO占主要的任务,计算量很小。比如请求网页、读写文件等。当然我们在Python中可以利用sleep达到IO密集型任务的目的。
  • 所谓计算密集型任务,是指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理),复杂的加减乘除等。
  • 多线程即在一个进程中启动多个线程执行任务。一般来说使用多线程可以达到并行的目的,但由于Python中使用了全局解释锁GIL的概念,导致Python中的多线程并不是并行执行,而是“交替执行”。
  • Python提供两组多线程接口,一是thread模块_thread,提供低等级接口。二是threading模块,提供更容易使用的基于对象的接口,可以继承Thread对象来实现线程,此外其还提供了其它线程相关的对象,例如Timer,Lock等。
  • 所以Python中的多线程适合IO密集型任务,而不适合计算密集型任务。
  • 由于Python中GIL的原因,对于计算密集型任务,Python下比较好的并行方式是使用多进程,这样可以非常有效的使用CPU资源。当然同一时间执行的进程数量取决你电脑的CPU核心数。
  • Python中的进程模块为mutliprocess模块,提供了很多容易使用的基于对象的接口。另外它提供了封装好的管道和队列,可以方便的在进程间传递消息。Python还提供了进程池Pool对象,可以方便的管理和控制线程。

免责声明:文章转载自《[Python]IO密集型任务 VS 计算密集型任务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发-------基于WKWebView的原生与JavaScript数据交互DLNA介绍(包含UPnP,2011/6/20 更新)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python模块学习心得

初始模块 1.什么是模块 模块是用来实现某项功能的一大堆代码,为什么会有模块呢?过程式编程的时候为了减少程序员编程代码的重复性,就利用函数的调用减少了代码的重复性,但是某些时候程序会过于的庞大,我们会用到很多很多 的函数,同样是为了方便,我们就把某些函数在一起共同产生的一些功能放在同一个py文件里面,这个py文件就称为一个模块,或者多个py文件在一个文件夹...

008-多线程-基础-ThreadGroup线程组

线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组。那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定位到一个线程,统一进行异常设置等。ThreadGroup它其实并不属于Java并发包中的内容,它是java.lang中的内容。但是掌握对其的于理解,在实际应用...

jenkins部署python语言webUI自动化项目

前置条件:我使用的系统是ubuntu20.04,linux系统,使用的war包本地安装jenkins 本地PyCharm运行WebUI项目 下载项目代码 git clone https://gitee.com/iread9527/iSelenium_Python.git 使用pycharm打开项目,本地安装selenium以及项目依赖的第三方库...

解决fiddler开启后打开浏览器提示无法访问网络

在使用python接口测试过程中常用jupyter调试python代码,因为jupyter默认代理端口是8888,开启后又打开fiddler抓包 打开浏览器提示‘无法访问网络’ 这个问题主要是端口冲突导致了 可以在tools-options-connections中修改端口号(默认为8888) 修改后点击ok重启fiddler即可...

JDK10

1 局部变量类型推断 1.1 JDK10之前定义变量存在的问题 很多人抱怨Java是一种强类型,需要引入大量的样板代码。很明显类型声明往往被认为不是必要的。 JDK10之前的Java代码总中,声明一个变量是非常繁琐的: package com.sunxiaping; import org.junit.Test; import java.util.Ar...

Ruby(rails)win环境下安装

1.RubyInstaller 在RubyInstaller官网下载window版本安装,地址:http://rubyinstaller.org/downloads/ 执行安装程序,勾选Add Ruby executables to your PATH,安装完成在cmd上测试ruby -v查看 注意安装路径中不要有空格,否则会影响rails的安装 TI...