python线程和c++线程的区别_python 多线程和C++多线程的区别
标签:
看到论坛上有人问python多线程和C++多线程的区别?
暖神是这样回答的:
Python有Global Interpreter Lock,所以嘛……你懂的。
C++11开始才有多线程,使用共享内存方式的线程间通信,有低级的atomic operation和memory order,以及高级的lock, condition的,却没有提供消息队列。
然后,就去找GIL(Global Interpreter Lock)的定义,下面有一个定义,wiki的定义是这样的。在stackoverflow上看到了另外一个更通俗的解释:
Suppose you have multiple threads which don‘t really touch each other‘s data. Those should execute as independently as possible. If you have a "global lock" which you need to acquire in order to (say) call a function, that can end up as a bottleneck. You can wind up not getting much benefit from having multiple threads in the first place.
To put it into a real world analogy: imagine 100 developers working at a company with only a single coffee mug. Most of the developers would spend their time waiting for coffee instead of coding.
None of this is Python-specific - I don‘t know the details of what Python needed a GIL for in the first place. However, hopefully it‘s given you a better idea of the general concept.
大概明白了一个基本的意思:GIL(全局解释器锁)会序列化线程访问,所以在加了GIL锁的情况下,多线程的优势和特点并不能真正发挥出来。甚至没有单线程跑得快,因为在acquire和relea锁的时候会执行额外的线程调度指令。这个GIL只在CPython中有,方便加载C的extension,Jython和ironpython里面是木有的。所以,在python里面应该用颗粒度更小的锁?
说到C++,上文暖神说到atomic operation,就是原子锁啦,具体的在这里有一个清晰的说明,atomic是一个好东西。。。。至于memory order,表示没看懂。。。还是老老实实的取用mutex吧。。。。。。
标签:
python线程和c++线程的区别_python 多线程和C++多线程的区别相关推荐
- python中的方法和函数的区别_python中函数与方法的区别?
Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...
- python中函数和类的区别_Python中函数和方法的区别
简单总结: 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数 ...
- python中str和int区别_python中eval与int的区别浅析
python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval(<字符串>)能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval() ...
- python函数和类的区别_Python中类中的方法还有区别?
上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~ Python类中的三种方 ...
- python中int和eval的区别_python中eval与int的区别浅析
python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval()能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval()函数将去掉字符串的两个 ...
- python中的return和print的区别_python中return和print的区别(详细)
Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...
- python中dumps和dump区别_python json.dumps() json.dump()的区别
之前写的很简单,只有几句话,最近发现本文是本博客阅读量最大的一篇文章,以为这样有种把人骗进来的感受,因而又细化了一些.若是还有很差的地方,欢迎指出.python 首先说明基本功能:json dumps ...
- python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别
python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...
- python中break和continue区别_Python break和continue用法及区别
Python break和continue用法及区别 在佛教中,常有"超出三界外,不在五行中"的说法,意为摆脱某种循环周始的羁绊,方得解脱.在程序设计中,我们也常有类似的需求.在满 ...
- python中int和input的区别_python中input()与raw_input()的区别分析
使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 纯数字输入 当输入为纯数字时 input返回的是数值类型,如int,float ra ...
最新文章
- 关于MYSQL 字符转义问题总结
- 省二计算机二级vb程序设计题,江苏省计算机二级考试VB程序设计复习题(分类汇总)...
- FreeMarkerConfigurer使用TemplateDirectiveModel时获取request、session
- ubuntu16.04下下载baiduyun大文件
- 用linux命令通常做什么,如何知道你在 Linux 里最常使用的几个命令?
- AppScan 7.8.1 - 简体中文
- MySQL—用户和权限管控
- 是哪个app_互联网APP创业哪个好
- 杭州英博电磁流量计通讯协议
- 【IDEA类注释模板和方法注释模板】
- 关于快递查询接口的实现
- Ruoyi-Vue是如何实现微信公众号免密登录的
- nginx-GET /favicon.ico HTTP/1.1
- windows下8080端口被占用解决方法
- RALL原则和unique_ptr
- DCU Streamer Prefetcher
- 联想Y7000P添加内存条以及固态硬盘
- C语言的预处理器无法先展开宏再拼接符号?可以!
- 聊聊微软的两个产品XBOX和SharePoint
- 盘点几位史诗级黑帽黑客:这群人到底厉害到什么程度?
热门文章
- 证券业大数据与人工智能发展现状与应用趋势
- 港科大教授张晓泉:目前AI多做预测分类,还需经济学发现因果关系
- 深度学习:未来机器人的进化途径
- Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
- 【图像隐写】基于matlab DWT+IDWT数字水印嵌入+提取【含Matlab源码 1530期】
- 【优化算法】世界杯优化算法(WCOA)【含Matlab源码 1427期】
- 【优化算法】多目标麻雀搜索优化算法(MSSA)【含Matlab源码 1366期】
- html让一行文字在两行,css单行两行文本自适应问题
- c# mysql清理_C# 中清空sql数据库中的数据
- 熵 机器学习_理解熵:机器学习的金标准