关于Python 多线程为何适合IO密集型任务 - Go语言中文社区

关于Python 多线程为何适合IO密集型任务


io密集型任务,一般情况下,io有发送数据(output)和返回数据(input)两个过程。就是发送消息,等待返回消息。python多线程在处理io的时候,一个线程获得GIL发送消息,然后等待返回消息(阻塞),python此时释放GIL, 其他线程得到GIL发送消息,然后同样等待返回消息(阻塞)......,这样保证了IO传输过程时间的合理利用,提高io传输效率。

关于GIL的工作方式:https://blog.csdn.net/zshluckydogs/article/details/81986649

由于python在用cpu执行计算任务的时候,GIL锁不会被释放,python多线程其实还是使用的单核在进行cpu计算。一个cpu时间片只会分给一个线程,因此,cpu密集型的情况下,多线程并不会加快计算速度。

 

但是多核下,多核多线程比单核单线程更差,原因是单核下多线程,每次释放GIL唤醒的那个线程都能获得GIL锁,能够无缝执行,但多核下,CPU释放GIL后,其他CPU上的线程都会进行竞争,但GIL可能被CPU0拿到,导致其他几个CPU上被唤醒的线程会醒着等待到切换时间后又进入待调度状态,这样会造成线程颠簸,导致效率更低。

关于现车颠簸:https://blog.csdn.net/pianistOfSoftware/article/details/51939736

所以多线程适合单核IO密集型任务。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhao_5352269/article/details/85990647
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:02:52
  • 阅读 ( 1274 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢