是否有任何工具可以控制执行二进制文件时的线程数量?

问题描述 投票:0回答:1

make
-j
标志,这使得
make
处理速度更快。
该标志告诉
make
允许生成所提供数量的“线程”的信息。

同样,有没有简单的方法可以在正常执行时应用类似
-j
的选项?

例如,假设我想更快地执行我的 python 脚本。

$ python myprogram.py -j4 // <--?

linux中有没有像

-j
那样有用的utils来控制线程数量?

linux multithreading execution
1个回答
1
投票

程序的并行化必须由程序员而不是用户来完成。

make
计算目标的依赖树。大多数目标将依赖于多个输入,例如由多个部分构建的可执行文件,例如编译为 .o 文件的 .c 文件。
make
的开发者理解了这一点,并使用依赖树,他们编写了
make
,这样它就可以弄清楚哪些部分可以彼此独立地准备,并且
-j4
告诉它并行准备4个,例如开始4 个并行编译器进程(不是线程!)。

为了加速你的Python程序,你自己需要确定可以相互独立执行的部分,这完全取决于你的Python程序解决的问题的具体情况;没有通用的解决方案,许多问题很难并行化。

并行化有两种形式:进程和线程。线程共享它们的内存(堆栈除外),并且在 Python 中受到“全局解释器锁 (GIL)”的限制,因此在 Python 中通常不可能使用线程获得更多计算能力。 (例如,在 C、C++ 和 Java 中情况就不同,线程可以让你加速。)另一方面,进程(由make使用)彼此交谈要困难得多(使用共享内存、信号量、套接字等),因为它们确实彼此独立。


在 Python 中,模块

multiprocessing

threading
分别提供处理多个进程和线程的功能。

请注意,在 Unix/Linux/POSIX 下,从已创建

线程

的程序创建新的进程,除非您非常小心,否则可能很容易导致死锁。

© www.soinside.com 2019 - 2024. All rights reserved.