为了账号安全,请及时绑定邮箱和手机立即绑定

关于python多进程、多线程的一些疑问

关于python多进程、多线程的一些疑问

莫回无 2018-07-02 12:13:06
当有2个cpu的时候,只有一个进程,该进程是否独享2个cpu资源?2、线程是进程下面的,如果有两个进程,分别独享1个cpu,进程下有n个线程,那么理论上这种情况下的多线程是无法利用多核的优势的?所以要利用多核,只能有一个进程?3、python的GIL是每个进程一个还是整个只有唯一一个?4、既然有GIL,但是又说多线程对“IO密集型”任务有优势。我的理解是,任务的瓶颈在读写上,虽然多个线程间切换也需要cup资源,但是由于计算任务并不繁重,所以线程间切换很流畅(线程间切换比进程切换所消耗的cpu资源更少),所以比起多进程来多线程在“IO密集型”任务上比较有优势。不知道我的理解有没有错误。请各位高手指点,谢谢大家~~
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

  1. 进程和 CPU 没有对应关系。一个进程开两个线程可以做到占用两个 core。

  2. 进程和 CPU 没有对应关系,因此不存在独享 1 个 CPU 的概念。你两个进程各开两个线程,可以占用 4 个 CPU。

  3. GIL 每个进程一个。

但是,由于 Python 中 GIL 的存在,Python 一个进程中每个时刻只能有一个线程真正在跑,因此要利用多核优势还得多进程。

  1. 多线程"对 IO 密集型有优势"这句话一般是相对于"计算密集型任务"而言的,这点自然不言而喻。至于用单进程或多进程跑 IO 密集型任务,个人感觉差别不大,毕竟瓶颈在操作系统和硬件上。


查看完整回答
反对 回复 2018-07-06
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

  1. 是,只要你的进程有2+个线程,就能占满坑;

  2. 不太清楚你对“独享”的定义是什么。如果是强行设置处理器相关性,那无法利用多核的优势,但多线程本身的优势还是在的。要利用多核,不一定只能有一个进程,每个核一个进程也充分利用了呀;

  3. 每个进程一个;

  4. 没有错误。开子进程,用新的GIL,代价是成本比较高,通信比较麻烦。开子线程,仍然受同一个GIL控制,但是成本比较低。反正GIL在IO的时候都会释放,所以IO密集型没必要为了新的GIL去付那么高的成本。

成本来自两方面:切换成本和通信成本。

  • 切换成本:进程比线程高;

  • 通信成本:不同处理器比同处理器高。

我们实际操作中一般给每个核一个进程,然后让每个进程管理自己的线程,就可以同时最小化两个成本。


查看完整回答
反对 回复 2018-07-06
  • 2 回答
  • 0 关注
  • 250 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信