当有2个cpu的时候,只有一个进程,该进程是否独享2个cpu资源?2、线程是进程下面的,如果有两个进程,分别独享1个cpu,进程下有n个线程,那么理论上这种情况下的多线程是无法利用多核的优势的?所以要利用多核,只能有一个进程?3、python的GIL是每个进程一个还是整个只有唯一一个?4、既然有GIL,但是又说多线程对“IO密集型”任务有优势。我的理解是,任务的瓶颈在读写上,虽然多个线程间切换也需要cup资源,但是由于计算任务并不繁重,所以线程间切换很流畅(线程间切换比进程切换所消耗的cpu资源更少),所以比起多进程来多线程在“IO密集型”任务上比较有优势。不知道我的理解有没有错误。请各位高手指点,谢谢大家~~
2 回答
FFIVE
TA贡献1797条经验 获得超6个赞
进程和 CPU 没有对应关系。一个进程开两个线程可以做到占用两个 core。
进程和 CPU 没有对应关系,因此不存在独享 1 个 CPU 的概念。你两个进程各开两个线程,可以占用 4 个 CPU。
GIL 每个进程一个。
但是,由于 Python 中 GIL 的存在,Python 一个进程中每个时刻只能有一个线程真正在跑,因此要利用多核优势还得多进程。
多线程"对 IO 密集型有优势"这句话一般是相对于"计算密集型任务"而言的,这点自然不言而喻。至于用单进程或多进程跑 IO 密集型任务,个人感觉差别不大,毕竟瓶颈在操作系统和硬件上。
30秒到达战场
TA贡献1828条经验 获得超6个赞
是,只要你的进程有2+个线程,就能占满坑;
不太清楚你对“独享”的定义是什么。如果是强行设置处理器相关性,那无法利用多核的优势,但多线程本身的优势还是在的。要利用多核,不一定只能有一个进程,每个核一个进程也充分利用了呀;
每个进程一个;
没有错误。开子进程,用新的GIL,代价是成本比较高,通信比较麻烦。开子线程,仍然受同一个GIL控制,但是成本比较低。反正GIL在IO的时候都会释放,所以IO密集型没必要为了新的GIL去付那么高的成本。
成本来自两方面:切换成本和通信成本。
切换成本:进程比线程高;
通信成本:不同处理器比同处理器高。
我们实际操作中一般给每个核一个进程,然后让每个进程管理自己的线程,就可以同时最小化两个成本。
- 2 回答
- 0 关注
- 269 浏览
添加回答
举报
0/150
提交
取消