python 多线程和协程的区别
一、共同点
都能进行多任务
二、不同点
- 协程是轻量级的线程,协程的运行依赖于线程,而线程的运行依赖于协程
- 共享全局变量问题:
- 协程: 共享全局变量不需要加锁,不会计算错误。对于全局变量,他的内存地址是不变的,每个协程在修改全局变量的时候,都会访问这个内存地址,因此不论存在多长时间的延时,再返回来计算拿的都是修改后全局变量,因此不会出错。协程之间共享一个进程的内存,但是协程在调度的时候,只有io耗时操作才会切换协程,比如(文件打开,写入,socket连接、接收等),对于普通的耗时操作,协程是无法提供切换的,但是可以通过monkey模块,实现对普通耗时操作,http请求的耗时操作等得切换。
- 线程: 共享全局变量需要加锁,否则会计算错误。多线程是共享同一个进程的内存。在执行多线程的时候,每个线程的调度时机是随机的,对于全局变量,如果在修改的节点切换线程,在若干时间切换回来后,如果此时其他线程修改了同一个全局变量,那么即使切换回来的,也是用该线程上一次拿到的全局变量进行操作,因为它只是被调度回来继续执行刚才未执行完的流程,因此最后会导致计算错误。举例说明: 两个线程在同时操作一个全局变量g_num,在g_num=0时,t1 取得g_num=0。此时系统把 t1 调度为”sleeping”状态,把t2转换为”running”状态,t2 也获得 g_num=0。然后 t2 对得到的值进行加1并赋给 g_num,使得g_num=1 。接着系统又把 t2 调度为”sleeping”,把 t1 转为”running”。线程t1又把它之前得到的0加1后赋值给g_num。这样导致虽然 t1 和 t2 都对g_num加1,但结果仍然是 g_num=1。
- 线程加锁参考:python 多线程
python 多线程和协程的区别相关推荐
- python 多线程和协程结合_一文讲透 “进程、线程、协程”
本文从操作系统原理出发结合代码实践讲解了以下内容: 什么是进程,线程和协程? 它们之间的关系是什么? 为什么说Python中的多线程是伪多线程? 不同的应用场景该如何选择技术方案? ... 什么是进程 ...
- Python 多线程 多进程 协程 yield
python中多线程和多进程的最大区别是稳定性和效率问题 多进程互相之间不影响,一个崩溃了不影响其他进程,稳定性高 多线程因为都在同一进程里,一个线程崩溃了整个进程都完蛋 多进程对系统资源开销大,多线 ...
- 【Python 多线程vs协程】爬取西游记
为了有效的学习和加深对于线程和协程的认知,将同一个任务用不同思路呈现很有帮助. 这里通过使用多线程以及协程两种方式对西游记的篇章内容进行爬取,来对比一下两者的耗时差异. 首先,多线程爬取. 这里没有限 ...
- python 多线程和协程结合_如何让 python 处理速度翻倍?内含代码
阿里妹导读:作为在日常开发生产中非常实用的语言,有必要掌握一些python用法,比如爬虫.网络请求等场景,很是实用.但python是单线程的,如何提高python的处理速度,是一个很重要的问题,这个问 ...
- python 多线程和协程结合_Python 异步编程,看这门课就够了~
我们常见的 Linux.Windows.Mac OS 操作系统,都是支持多进程的多核操作系统.所谓多进程,就是系统可以同时运行多个任务.例如我们的电脑上运行着 QQ.浏览器.音乐播放器.影音播放器等. ...
- 多线程多进程协程的区别和不同的应用场景
当然既然是都是 多这个字开头,那么就是多任务,我们需要了解 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法, 实现⽤多个任务"⼀起"执⾏(实际上总有⼀些任务不在执 ...
- python进程线程协程区别_Python3多线程与协程
python中的多线程非常的常用,之前一直糊里糊涂地使用,没有一些系统性的概念,记录一下~ 0x001 多线程的优势:可将长时间占用的程序放到后台 可能会加速程序执行速度 能够实现一些类似同步执行的效 ...
- php协程 多线程,【swoole.2.01】多进程,多线程和协程
前言 在体验swoole的协程功能之前,需要先知道多进程,多线程和协程的区别. 多进程 典型的多进程结构就是耳熟能详的master-worker结构.swoole本身也是由master-maneger ...
- 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...
本文带来各类奇怪的IT百科知识. [百尺竿头,更进一步学Python]Python进阶课程--进程:线程和协程的区别 现在多进程多线程已经是老生常谈了:协程也在最近几年流行起来.今天我们本文主要介绍进 ...
最新文章
- Kotlin implements 的实现
- web实现QQ第三方登录 开放平台-web实现QQ第三方登录
- java tail -f 后返回_tail -f 的实现 | 学步园
- Spring中的Events
- 疫情之下的求职姿势:视频面试,电话面试这样做,你就已经赢一半了!
- .NET Core微服务之基于Ocelot实现API网关服务
- java汉字转化accic_Java自主学习贴
- Windows Qt设置环境变量
- 表格中复制粘贴到其他位置的数据会携带引号等不可见字符,该怎么处理?
- Xshell4、Xftp4注册码
- 项目启动管理、需求分析、可行性方案论证 IT项目管理
- 中兴笔试题,求子区间元素运算后结果为0
- Android之常见事件响应的实现方式
- 华为rh2288v2服务器系统,扩展能力强 华为RH2288H V2服务器解析
- ftp下载工具绿色版,网络上难找的绿色版ftp下载工具
- 君子当如是——观《孔子》有感
- cad转dxf格式文件太大,将CAD图纸文件进行转换成低版本DXF格式如何进行?
- 递归解决汉罗塔问题到底多么简单
- 三小时,阿里云使用docker部署redis(阅文无数)
- 海信电视可以刷鸿蒙系统吗,海信电视通用刷机教程