当前位置: 首页 > 知识库问答 >
问题:

python3 - 多进程大于CPU数量下的多进程?

商业
2023-06-07

由于全局解释器锁的存在,python3的多线程是伪并行的。
现在看进程。如果一个CPU仅仅有4个核,我在设置pool的时候,设置Pool(5),此时,有5个并行的进程在同时运行,这个说法不对吧,任何时刻,由于CPU的束缚,仅仅只可以有4个进程并行。
我的理解对吧?

共有2个答案

令狐弘益
2023-06-07

企业微信截图_16860364597962.png
第五个进程要等有可用核心才能运行

韩景辉
2023-06-07

同时在运行的线程只能是核心数量,但是CPU使用分时方法让用户觉得都是并行的,也就是4核心、5线程的情况下,CPU不会等待4个线程全部执行完毕才执行第五个线程,而是在执行过程中不断的在5个线程中切换执行,你可以想象成每个线程执行几行代码,然后立马切换到其他线程执行,之后再不断切换(切换是完全随机的,不能保证先后顺序),因此从用户角度他们是并行的。

 类似资料:
  • 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。这样做的理由

  • 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。这样做的理由

  • 我自己写了一个多进程下载网络大文件的程序:基本思路是多进程分块下载完后,再拼接文件。 这个url的大文件被分割成20个部分,开启了4个进程下载。 测试运行: python3 mpdown.py #速度比单进程快50%以上。 现在我有点不满意这个多进程下载,拼接文件(merge)是在全部下载完成后,再拼接,我想这个拼接动作也修改成多进程并行的,边下载边拼接。 由于下载是多进程的,各进程存在一定的竞争

  • 主要内容:exec() 方法,support.js 文件代码:,master.js 文件代码:,spawn() 方法,support.js 文件代码:,master.js 文件代码:,fork 方法,support.js 文件代码:,master.js 文件代码:我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout

  • 我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout 和child.stderr。他们可能会共享父进程的 stdio 流,或者也可以是独立的被导流的流对象。 Node 提供了 child_process 模块来创建子进

  • mongols提供的所有服务器设施既可以多线程化也可以多进程化。 并且支持在多进程化的同时多线程化。 来看代码: #include <mongols/util.hpp> #include <mongols/web_server.hpp> #include <sys/prctl.h> #include <sys/signal.h> #include <sys/wait.h> #include <u