多进程|多线程的不同应用场景:Python还是C
我的机器学习教程「美团」算法工程师带你入门机器学习 以及 「三分钟系列」数据结构与算法 已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的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相关推荐
- Python实现多进程/多线程同时下载单个文件
功能描述: 使用多进程/多线程同时下载单个文件,可以自定义文件地址.进程/线程数量. 主要思路: 获取文件大小,使用多个进程/线程分别下载一部分,最后再把这些文件拼接起来. 参考代码: 运行结果: - ...
- python多进程多线程,多个程序同时运行
python 多线程 多进程同时运行 多任务要求 python 基础语法 python 文件目录操作 python 模块应用 开发工具 pycharm 实现方法 多任务的实现可以用进程和线程来实现 进 ...
- Python高并发爬虫测评(2): 多进程, 多线程和异步协程哪个快?
在Python爬虫下一代网络请求库httpx和parsel解析库测评一文中我们对比了requests的同步爬虫和httpx的异步协程爬虫爬取链家二手房信息所花的时间(如下所示:一共580条记录),结果 ...
- 多进程多线程 ---- Python和Java
Python: 真正的并行执行多任务只能在 多核CPU 上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统会自动 的把很多任务轮流调度到每个核心上执行. 对于操作系统来说, ...
- delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)
这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...
- 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2
并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...
- linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...
并行程序设计探讨(3)--Windows和Linux对决(多进程多线程) 前面的博文经过分析总结,最后得出两种并行技术:多进程多线程.多机协作.对于多进程和多线程来说,最有代表性且最常见的的莫过于Wi ...
- 什么是多进程-多线程-多协程 ----进程和多线程
进程和多线程 进程通信 进程的组成 进程之间的通信方式 管道 匿名管道 命名管道 信号 信号量 共享内存 socket 消息队列 进程线程 系统知识 cpu时间片(抽象概念) 线程: 进程: 进程与线 ...
- Django 多进程多线程的一些个人理解
一.Django 开发环境与生产环境 开发/调试 python manage.py runserver 0.0.0.0:8080 生产环境 Nginx + uWSGI + supervisor 生产环 ...
- 多进程多线程爬取图片
# -*- coding:utf-8 -*- import urllib2 import urlparse import re import os ##import pickle import thr ...
最新文章
- IOS sqlite数据库增删改查
- MySQL往数据库中存入中文字符时变问号
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
- 为sap的alv的最左侧添加【选中】按钮用于同时选中多行...
- 挖矿为什么要用显卡_数字货币行情分析 2020/07/17 为什么大佬们都转向显卡挖矿了?...
- “黑天鹅”,正在改变 AI 落地医疗领域的加速度
- Git 提交失败提示无写入权限与 Linux 下创建文件的默认权限
- Qmail 邮件系统维护管理技术文档
- go语言通道插入0_使用Go语言常遇到的问题
- asp.net c# 网页 导出excel 多表格 多个sheet
- EXCEL 导入MSSqlserver数据库报错
- Linux系统下载并安装Redis
- 汉诺塔递归算法(Python编程)
- Mark Text快捷键
- 关于音频EQ、DRC、等响度、3D环绕音、虚拟低音、变音、AEC、AGC、ANS等解释
- 慢就是快的人生哲理_快与慢,人生的哲学思考
- 涂涂乐的详细实现之三--文件IO操作
- 空山新雨后 [Unreal Engine 超写实渲染]
- 【 58沈剑 架构师之路】究竟啥才是互联网架构“高并发”
- 【Flutter实现表格上下左右滚动】