C++ 多进程=多个进程正在运行?
我对多重处理有些困惑。我是一名3年的Python程序员,但从未真正需要并行执行任务(不仅仅是异步)。但我知道,或者我认为知道的是,当使用Python中的C++ 多进程=多个进程正在运行?,c++,python,windows,parallel-processing,multiprocessing,C++,Python,Windows,Parallel Processing,Multiprocessing,我对多重处理有些困惑。我是一名3年的Python程序员,但从未真正需要并行执行任务(不仅仅是异步)。但我知道,或者我认为知道的是,当使用Python中的多处理模块来实现“真正的并行性”时,新的Python.exe进程就会产生 例如,3D软件使用所有可用CPU的能力来渲染3D场景。但是我在任务管理器中没有看到多个Cinema 4D.exe进程 我上面的说法正确吗?使用多处理模块时会产生多个Python进程 我上面的说法正确吗,即多个Python进程 在使用多处理模块时是否生成 是的,没错。Pyt
多处理
模块来实现“真正的并行性”时,新的Python.exe
进程就会产生
例如,3D软件使用所有可用CPU的能力来渲染3D场景。但是我在任务管理器中没有看到多个Cinema 4D.exe
进程
多处理
模块时会产生多个Python进程如果是,为什么是,C++应用如何不使用所有的CPU 多进程
嗯,在Cinema4D中大概没有GIL这样的东西——因此它可以并行执行多个线程。通过在同一进程中运行多个线程,也可以使用多个CPU。这不是Python
多处理模块所做的
Python中有一个threading
模块。不幸的是,在CPython中,线程没有您想象的那么有用,因为它们都在所谓的“全局解释器锁”上竞争。因此,它们在Python中的并行性比在许多其他语言中要小得多。如果使用线程,则需要担心代码中的哪些操作将真正是并行的。如果您使用的是您不需要的流程(尽管您可能会担心其他事情,比如共享数据)
我不知道Python的其他实现和GIL是否存在同样的问题。但是,除非您是专门为Jython/IronPython/whatever编写代码,否则CPython的限制适用于您的程序…通常,您会运行多个线程,而不是多个进程。运行线程而不是进程有许多优点。主要的优点是,属于进程的所有内存都在线程之间共享,您必须设置某种排序内存共享协议,以便在不同进程之间共享(部分)数据
Python和C++都支持多读,但如别处所提到的,Python代码不能在多个处理器上运行。但是,它对于“半并行”的操作非常有用(我使用python线程读取一个文件并在声卡上播放它,同时录制并保存另一个文件,同时在串行端口上发出其他命令以控制“正在测试”的设备)
Python模块multiprocessing
实际上是用于使用多个单独的进程,这有助于“打破Python解释器锁”
通常,如果您希望代码完全独立于系统中运行的其他任务,并且不必在进程之间共享[很多]数据,那么在单独的进程中运行会更有用-例如,在独立的进程中计算非常大的素数将是一件好事[我指的是那些有几十万或更多数字的数字]-进程在没有其他输入的情况下独立运行数小时,并且只需要少量不变的输入——“质数候选”