采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
你好老师, 在Java中多线程可以用来在woker线程读取一个文件的同时主线程可以继续被执行,以达到性能的提升。可是在python中GIL让cpu不能同时处理多个python进程,也就是说有个worker线程在读取文件时,主线程是被挂起的,这和就让主线程去读取文件没有什么区别啊。还是说worker线程比主线程消耗更少的资源?请老师解释一下。
python的多线程是因为同一时间只能有一个线程工作,但是遇到IO密集的操作,GIL会释放,处理IO的线程是挂着等待IO操作了,但是你的其他线程也因此获得了GIL这把锁,可以继续工作。所以说多线程对IO密集操作有提升,因为单线程的话就全程堵着等IO了。
另外你说的"可是在python中GIL让cpu不能同时处理多个python进程"应该是笔误,每一个进程都是独立的,都有自己的GIL。
非常感谢!
课程里讲的好详细啊。。。不知道为什么要单独提问了?还是说课程里讲的没有解决你的疑问?
你在视频里的原话是,当cpu执行I/O指令时可以把此线程挂起,换到别的线程来执行。虽然GIL让cpu在同一时间只能执行一个python线程,但是cpu可以在多个python线程来回切换,当worker线程读取时,可以切换回主线程继续执行,虽然效果不如多个python线程并行执行,但是也比单线程强。我这样理解对吗?
我记得我解释了,运行单位并不是以线程为运行单位的,还分析了一条语句并不是一个执行单位。
登录后可查看更多问答,登录/注册
7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程
1.2k 20
2.3k 17
2.3k 15
2.5k 14
1.4k 13