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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao_5352269/article/details/85990647

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密集型任务。

猜你喜欢

转载自blog.csdn.net/zhao_5352269/article/details/85990647