标签:

看到论坛上有人问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++多线程的区别相关推荐

  1. python中的方法和函数的区别_python中函数与方法的区别?

    Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...

  2. python中函数和类的区别_Python中函数和方法的区别

    简单总结: 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数 ...

  3. python中str和int区别_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval(<字符串>)能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval() ...

  4. python函数和类的区别_Python中类中的方法还有区别?

    上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~ Python类中的三种方 ...

  5. python中int和eval的区别_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval()能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval()函数将去掉字符串的两个 ...

  6. python中的return和print的区别_python中return和print的区别(详细)

    Huskiesir python最近正在研究.今天,我面临一个问题,那就是,返回和印刷的区别.双方都能输出结果.的区别是什么?闲话少说,看下面的例子.# Code1: def break_words( ...

  7. python中dumps和dump区别_python json.dumps() json.dump()的区别

    之前写的很简单,只有几句话,最近发现本文是本博客阅读量最大的一篇文章,以为这样有种把人骗进来的感受,因而又细化了一些.若是还有很差的地方,欢迎指出.python 首先说明基本功能:json dumps ...

  8. python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别

    python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...

  9. python中break和continue区别_Python break和continue用法及区别

    Python break和continue用法及区别 在佛教中,常有"超出三界外,不在五行中"的说法,意为摆脱某种循环周始的羁绊,方得解脱.在程序设计中,我们也常有类似的需求.在满 ...

  10. python中int和input的区别_python中input()与raw_input()的区别分析

    使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 纯数字输入 当输入为纯数字时 input返回的是数值类型,如int,float ra ...

最新文章

  1. 关于MYSQL 字符转义问题总结
  2. 省二计算机二级vb程序设计题,江苏省计算机二级考试VB程序设计复习题(分类汇总)...
  3. FreeMarkerConfigurer使用TemplateDirectiveModel时获取request、session
  4. ubuntu16.04下下载baiduyun大文件
  5. 用linux命令通常做什么,如何知道你在 Linux 里最常使用的几个命令?
  6. AppScan 7.8.1 - 简体中文
  7. MySQL—用户和权限管控
  8. 是哪个app_互联网APP创业哪个好
  9. 杭州英博电磁流量计通讯协议
  10. 【IDEA类注释模板和方法注释模板】
  11. 关于快递查询接口的实现
  12. Ruoyi-Vue是如何实现微信公众号免密登录的
  13. nginx-GET /favicon.ico HTTP/1.1
  14. windows下8080端口被占用解决方法
  15. RALL原则和unique_ptr
  16. DCU Streamer Prefetcher
  17. 联想Y7000P添加内存条以及固态硬盘
  18. C语言的预处理器无法先展开宏再拼接符号?可以!
  19. 聊聊微软的两个产品XBOX和SharePoint
  20. 盘点几位史诗级黑帽黑客:这群人到底厉害到什么程度?

热门文章

  1. 证券业大数据与人工智能发展现状与应用趋势
  2. 港科大教授张晓泉:目前AI多做预测分类,还需经济学发现因果关系
  3. 深度学习:未来机器人的进化途径
  4. Kafka从上手到实践 - 庖丁解牛:Partition | 凌云时刻
  5. 【图像隐写】基于matlab DWT+IDWT数字水印嵌入+提取【含Matlab源码 1530期】
  6. 【优化算法】世界杯优化算法(WCOA)【含Matlab源码 1427期】
  7. 【优化算法】多目标麻雀搜索优化算法(MSSA)【含Matlab源码 1366期】
  8. html让一行文字在两行,css单行两行文本自适应问题
  9. c# mysql清理_C# 中清空sql数据库中的数据
  10. 熵 机器学习_理解熵:机器学习的金标准