请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多线程对于IO密集性能的提升

你好老师, 在Java中多线程可以用来在woker线程读取一个文件的同时主线程可以继续被执行,以达到性能的提升。可是在python中GIL让cpu不能同时处理多个python进程,也就是说有个worker线程在读取文件时,主线程是被挂起的,这和就让主线程去读取文件没有什么区别啊。还是说worker线程比主线程消耗更少的资源?请老师解释一下。

正在回答

2回答

python的多线程是因为同一时间只能有一个线程工作,但是遇到IO密集的操作,GIL会释放,处理IO的线程是挂着等待IO操作了,但是你的其他线程也因此获得了GIL这把锁,可以继续工作。所以说多线程对IO密集操作有提升,因为单线程的话就全程堵着等IO了。

另外你说的"可是在python中GIL让cpu不能同时处理多个python进程"应该是笔误,每一个进程都是独立的,都有自己的GIL。

0 回复 有任何疑惑可以回复我~
7七月 2020-11-04 19:41:14

课程里讲的好详细啊。。。不知道为什么要单独提问了?还是说课程里讲的没有解决你的疑问?


0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕慕8136048 #1
    你在视频里的原话是,当cpu执行I/O指令时可以把此线程挂起,换到别的线程来执行。虽然GIL让cpu在同一时间只能执行一个python线程,但是cpu可以在多个python线程来回切换,当worker线程读取时,可以切换回主线程继续执行,虽然效果不如多个python线程并行执行,但是也比单线程强。我这样理解对吗?
    回复 有任何疑惑可以回复我~ 2020-11-05 05:16:56
  • 7七月 回复 提问者 weixin_慕慕8136048 #2
    我记得我解释了,运行单位并不是以线程为运行单位的,还分析了一条语句并不是一个执行单位。
    回复 有任何疑惑可以回复我~ 2020-11-05 12:01:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信