我的机器学习教程「美团」算法工程师带你入门机器学习  以及 「三分钟系列」数据结构与算法  已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。

欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~

多进程与多线程

无论是多进程还是多线程,只要数量一多,效率肯定上不去,为什么呢?我们打个比方,假设你不幸正在准备中考,每天晚上需要做语文、数学、英语、物理、化学这5科的作业,每项作业耗时1小时。

如果你先花1小时做语文作业,做完了,再花1小时做数学作业,这样,依次全部做完,一共花5小时,这种方式称为单任务模型,或者批处理任务模型。
假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分钟,再切换到英语,以此类推,只要切换速度足够快,这种方式就和单核CPU执行多任务是一样的了,以幼儿园小朋友的眼光来看,你就正在同时写5科作业。

但是,切换作业是有代价的,比如从语文切到数学,要先收拾桌子上的语文书本、钢笔(这叫保存现场),然后,打开数学课本、找出圆规直尺(这叫准备新环境),才能开始做数学作业。操作系统在切换进程或者线程时也是一样的,它需要先保存当前执行的现场环境(CPU寄存器状态、内存页等),然后,把新任务的执行环境准备好(恢复上次的寄存器状态,切换内存页等),才能开始执行。这个切换过程虽然很快,但是也需要耗费时间。如果有几千个任务同时进行,操作系统可能就主要忙着切换任务,根本没有多少时间去执行任务了,这种情况最常见的就是硬盘狂响,点窗口无反应,系统处于假死状态。
所以,多任务一旦多到一个限度,就会消耗掉系统所有的资源,结果效率急剧下降,所有任务都做不好。

计算密集型 vs. IO密集型

是否采用多任务的第二个考虑是任务的类型。我们可以把任务分为计算密集型和IO密集型。

计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。
计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低,完全不适合计算密集型任务。对于计算密集型任务,最好用C语言编写。

第二种任务的类型是IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。
IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。

多进程|多线程的不同应用场景:Python还是C相关推荐

  1. Python实现多进程/多线程同时下载单个文件

    功能描述: 使用多进程/多线程同时下载单个文件,可以自定义文件地址.进程/线程数量. 主要思路: 获取文件大小,使用多个进程/线程分别下载一部分,最后再把这些文件拼接起来. 参考代码: 运行结果: - ...

  2. python多进程多线程,多个程序同时运行

    python 多线程 多进程同时运行 多任务要求 python 基础语法 python 文件目录操作 python 模块应用 开发工具 pycharm 实现方法 多任务的实现可以用进程和线程来实现 进 ...

  3. Python高并发爬虫测评(2): 多进程, 多线程和异步协程哪个快?

    在Python爬虫下一代网络请求库httpx和parsel解析库测评一文中我们对比了requests的同步爬虫和httpx的异步协程爬虫爬取链家二手房信息所花的时间(如下所示:一共580条记录),结果 ...

  4. 多进程多线程 ---- Python和Java

    Python: 真正的并行执行多任务只能在    多核CPU    上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统会自动 的把很多任务轮流调度到每个核心上执行. 对于操作系统来说, ...

  5. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  6. 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2

    并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...

  7. linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...

    并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...

  8. 什么是多进程-多线程-多协程 ----进程和多线程

    进程和多线程 进程通信 进程的组成 进程之间的通信方式 管道 匿名管道 命名管道 信号 信号量 共享内存 socket 消息队列 进程线程 系统知识 cpu时间片(抽象概念) 线程: 进程: 进程与线 ...

  9. Django 多进程多线程的一些个人理解

    一.Django 开发环境与生产环境 开发/调试 python manage.py runserver 0.0.0.0:8080 生产环境 Nginx + uWSGI + supervisor 生产环 ...

  10. 多进程多线程爬取图片

    # -*- coding:utf-8 -*- import urllib2 import urlparse import re import os ##import pickle import thr ...

最新文章

  1. IOS sqlite数据库增删改查
  2. MySQL往数据库中存入中文字符时变问号
  3. 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
  4. 为sap的alv的最左侧添加【选中】按钮用于同时选中多行...
  5. 挖矿为什么要用显卡_数字货币行情分析 2020/07/17 为什么大佬们都转向显卡挖矿了?...
  6. “黑天鹅”,正在改变 AI 落地医疗领域的加速度
  7. Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限
  8. Qmail 邮件系统维护管理技术文档
  9. go语言通道插入0_使用Go语言常遇到的问题
  10. asp.net c# 网页 导出excel 多表格 多个sheet
  11. EXCEL 导入MSSqlserver数据库报错
  12. Linux系统下载并安装Redis
  13. 汉诺塔递归算法(Python编程)
  14. Mark Text快捷键
  15. 关于音频EQ、DRC、等响度、3D环绕音、虚拟低音、变音、AEC、AGC、ANS等解释
  16. 慢就是快的人生哲理_快与慢,人生的哲学思考
  17. 涂涂乐的详细实现之三--文件IO操作
  18. 空山新雨后 [Unreal Engine 超写实渲染]
  19. 【 58沈剑 架构师之路】究竟啥才是互联网架构“高并发”
  20. 【Flutter实现表格上下左右滚动】

热门文章

  1. The Strategy pattern
  2. python - PyDev统一编码
  3. 常见 CentOS 7 安装问题
  4. LeetCode962. 最大宽度坡
  5. 学习python的第六天---1(理论)
  6. python编程快速上手
  7. python scipy stats学习笔记
  8. 如何判断你和优秀AI算法工程师之间的差异?
  9. 【分享】伙伴们!关注公众号要慎重!这半年我取关了很多,这几个留下了!真心推荐给你!...
  10. 【机器学习】今天详细谈下Soft Margin SVM和 SVM正则化