python多线程、进程

1、 并行和并发

(1)并发:一定周期内,多个任务来回切换执行,宏观上形成“该周期内有多个任务在同时进行”;但同一时间点,只有一个任务在执行。

举例:
你想在2小时内同时完成做饭、扫地、烧水。但家里就你一个人,你根据操作难易排了下顺序,所以就先把电茶壶接满水开始烧。接着你就做饭,做饭中,有个菜需要炖半个小时,这个时候你发现电茶壶的水还没烧开,所以你就赶快又去扫地。等地扫完了,你发现水烧开了且菜还在炖,你就把水倒进了暖瓶。倒完接着做饭。
这样,所有任务完成的最终时间 同时受多任务之间的协调快慢、任务各自的完成时间限制。比如本来单独执行任一个任务:做饭70分钟、扫地20分钟、烧水15分钟,但是并发中可能出现水烧好了,菜也炖好了。你为了不让菜炖的太烂,就选择先把菜盛起来(资源抢占,做饭抢到了资源,倒水就还得继续等待下一次资源四方),这样“水被导入暖瓶”的时间就被推后。

总体就是:一个主体在同一周期(2小时)内同时开启多个线程,每个线程做1个任务,但同一时间点只有一个线程(也即一个任务)在做。

(2)并行:同一时间点,多个任务同时进行。

举例:家里有多个人。还是想在2小时内同时完成做饭、扫地、烧水。你就说A你来扫地,B你来烧水,C你来做饭。这样A,B,C就并行执行任务了!
这样,所有任务完成的最终时间 由 任务做的最慢的那条线决定。也就是最终只需要70分钟!

总体就是:多个主体(A,B,C)各自领取线程(即工作服,领取了工作服相当于领取了对应的任务),在时间执行上互不影响,不需要等待一方释放资源(即不需要等别人把工作服用完再给他)。同一时间点多个任务在做!

2、Python异步和多线程并发区别

参考:https://www.python100.com/html/564PVUJ9OQ99.html

异步:
单线程下完成多个任务切换。

举例:
工人-cpu核,衣服-线程,做饭、扫地、烧水-任务。

  • 多线程并发模型中,每个线程可以看作是同一工人拥有的不同工作服,虽然在同一时间段内他可以换上不同的工作服进行做饭、扫地、烧水这些任务,但在任何特定的时间点,他只能执行一项任务。比如他在做饭的同时还要扫地,那他必须停下来,换上扫地的工作服,然后扫地。“换衣服”就是在做线程的上下文切换,会消耗一定的时间。
  • 异步I/O(或事件驱动)模型中,可以看做虽然这个工人他拥有多套工作服(多个线程),但是他的每套工作服都是万能的。比如他在做饭、扫地、烧水时只需穿其中一套万能工作服即可,不用再每次切换任务都要换工作服(即在单线程内同时完成多项任务,不用线程间切换),但他在任何特定的时间点也只能做一项任务。他可以在等待烧水的过程中去做饭或者扫地,这样虽然仍然是一项一项地完成任务,但由于减少了等待资源的时间,整体上可以在相同的时间内完成更多的任务。

但全局变量的安全性是受多线程影响的!在单个线程中使用异步IO,只会提高cpu的使用率(异步I/O可以有效地解决I/O密集型任务中的阻塞问题,提高程序的并发性能)。但无法保障整个web中只有这一个线程,所以异步IO并不能保证全局变量的安全性!

3、多线程和多进程

多线程适合“IO密集型任务(如请求网页、读写文件等)”
多进程适合“计算密集型任务(指CPU计算占主要的任务,CPU一直处于满负荷状态。比如在一个很大的列表中查找元素(当然这不合理)、复杂的加减乘除等。)”
多进程和多线程既可以并发运行也可并行运行。

python和java多线程比较

(1)python 多线程是假的。

因为GLC锁的存在,即使多线程下也只是让他们交替获得GLC锁,即每个线程都可以执行,但也只是“交替”执行,而不是真正的同时执行!同一时间下,即使是多CPU,也只有1个线程可以获得GLC锁,即只有一个线程可执行!

简明案例:
https://www.cnblogs.com/fulaien/p/16489366.html
https://www.rstk.cn/news/736629.html?action=onClick
https://zhuanlan.zhihu.com/p/24283040

python: 多线程共享进程的内存;多进程互相独立。但python下多进程并行是真的。

(2)java下,多线程并发可以实现并行。

如果是单个CPU,那效果和python多线程是一样的。如果是多个CPU,每个CPU上的线程互不影响,就会出现多线程下、同一时间点下、不同CPU上都有线程在跑,这样就真正实现了并发下的并行!

java: 每个线程有自己独立的栈和资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Iterator设计模式

目录 1、示例 1.1 Aggregate接口 1.2 Iterator接口 1.3 Book类 1.4 BookShelf类 1.6 BookShelfIterator 类 1.7 Main类 2、解释Iterator模式中的角色 2.1 Iterator模式的存在意义 2.2 抽象类和接口 2.3 Aggregate 和 Iterator的对应 2.4 容易弄错"下一个"…

QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

widget.h(登录窗口) #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <Qmap> //模板类class Widget : public QWidget …

rust切片

切片类型写为[T]。 切片是序列的一个片段。 它是动态大小类型&#xff0c;所以要使用切片类型&#xff0c;就必须使用它的指针类型。引用是最常用的指针类型。 [T; n]能隐式转换成[T]。 一、定义切片 &#xff08;一&#xff09;不可变切片 &[T]&#xff0c;共享切片&…

有效的括号(栈的高频面试题)

一、题目描述 题目连接&#xff1a;有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺…

005-第一代光电小工具(一)

第一代光电小工具(一) 文章目录 第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot 播放音频软件截图 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 曲线、 SQLite 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

2024届数字IC设计秋招面经-鼎信

背景 985硕士&#xff0c;计算机科班&#xff0c;实验室做cpu设计和fpga算法加速&#xff0c;我做处理器安全方向&#xff0c;有项目。 投递 8.25 没有笔试&#xff0c;两轮面试&#xff0c;直接通知下周一面试&#xff0c;草草的准备了下。 一面 技术面 9.4 不到半小时 …

MySQL修改时间添加时间自动更新

第一种: database.php设置 false改为true;然后看是使用的什么框架 如果是tp5需要数据库是create_time和update_time字段 laravel的话,需要的是created_at和updated_at字段 如果想自定义的话,就在model文件里加上 protected $createTime create_at;// 默认的字段为create_t…

利用spring写一个反向代理

让spring服务器做为一个反向代理&#xff0c;将一些请求转发给其他的服务来完成响应。实现类似于nginx的功能。 思路&#xff1a; 1、写一个Filter来判断路径来转发符合规则的请求(只转发后端请求且符合特定规则的请求) 2、需要判断后端的服务是否存活 3、转发需要将表单之间的…

Python进阶复习-自带库

目录 random库collection库Counter函数namedtuple函数deque函数 itertools库enumarate函数zip函数product函数 random库 random.random():生成一个 0 到 1 之间的随机浮点数。random.uniform(a, b):生成一个在 a 和 b 之间均匀分布的随机浮点数。random.randint(a, b):生成一个…

LED智能家居灯 开关调光 台灯落地灯控制驱动 降压恒流IC AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、内置功率MOS管&#xff0c;适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W&#xff0c;最大电流6A。AP5191可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

sketch for Mac快捷键大全

你可以在sketch中使用键盘快捷键来加快你的设计过程。要使用键盘快捷键&#xff0c;请同时按下下列列表的所有键。有些命令只能根据你在做什么或者你选择了什么才启用&#xff0c;所有把命令分成了下列不同的部分。 sketch下载地址&#xff1a;sketch 破解-Sketch for mac(专业…

# (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

&#xff08;1462. 课程表 IV leetcode&#xff09;广搜拓扑-------------------Java实现 题目表述 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想…

图书管理系统 数据结构先导课暨C语言大作业复习 | JorbanS

问题描述 读取给定的图书文件book.txt中的信息&#xff08;book.txt中部分图书信息如下图所示&#xff09;&#xff0c;完成一个图书信息管理系统&#xff0c;该系统的各个功能模块要求利用菜单选项进行选择。 系统功能要求 图书浏览 读取book.txt中的文件信息并依次输出所…

【Unity程序技巧】Unity中的单例模式的运用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

iptables 防火墙配置

文章目录 iptables 防火墙配置规则链的分类–五链处理的动作iptables 常用参数和作用iptables 防火墙配置查看规则链清空规则链设置默认规则将流入的流量丢弃允许ICMP协议流量通过删除默认策略允许所以流量通过设置将所有流入22端口的流量全部拒绝允许指定网段的22端口通过设置…

学习如何使用最强大的 JavaScript 函数

今天你将学习如何使用**最强大的** JavaScript函数。 数组归约 “Array.reduce是最强大的 JavaScript Function. 时期。 ” reduce有什么作用?为何如此强大? 这是reduce的技术定义...... Array.prototype.reduce() reduce() 方法对数组的每个元素执行(您提供的)reducer 函…

Java键盘录入案例

键盘录入 Java里面有一个类叫Scanner&#xff0c;可以接收键盘输入的数字 第一步&#xff1a;导包&#xff0c;找Scanner这个类 import java.util.Scanner; 导包必须在类定义的上边&#xff08;public class上面&#xff09; 第二步&#xff1a;创建对象&#xff0c;开始使用Sc…

selenium学习

selenium模块和爬虫之间的关联 便捷的获取网站中动态加载的数据便捷实现模拟登录 什么是selenium模块 基于浏览器自动化的一个模块 selenium使用流程&#xff1a; - 环境安装&#xff1a;pip install selenium - 下载一个浏览器的驱动程序&#xff08;谷歌浏览器&#xff…

【数据分享】2000-2022年全球范围500m分辨率类NPP-VIIRS夜间灯光数据

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;我们平时使用的夜间灯光数据主要来源于NPP/VIIRS和DMSP/OLS两种渠道&#xff0c;这两种数据由于分辨率、数据年份、传感器等不同存在不兼容的情况限制了长时序夜间灯光数据的使用&#xff0c;针对该问题我们之前分享过…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…