执行二进制文件时,是否有任何实用程序来控制线程数量?

时间:2018-11-16 08:21:58

标签: linux multithreading optimization core execution

make具有-j标志,这使make的处理速度更快。
此标志告知make信息,以允许产生所提供的“线程”数量。

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

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

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

Linux中是否有任何有用的utils来像-j一样控制线程数量?

1 个答案:

答案 0 :(得分:1)

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

make计算目标的依赖关系树。大多数目标将取决于多个输入,例如由多个部分构建的可执行文件,例如将.c文件编译为.o文件。 make的开发人员理解了这一点,并且使用依赖树,他们编写了make,以便可以找出可以彼此独立准备的部分,并且-j4告诉它准备4并行运行,例如并行启动4个编译器进程(不是线程!)。

要加快Python程序的速度,您自己需要确定可以彼此独立执行的部分,这完全取决于Python程序要解决的问题的具体情况。没有通用的解决方案,很多问题很难并行化。

并行化有两种形式:processes and threads。线程共享其内存(堆栈除外),并且在Python中受Global Interpreter Lock (GIL)的限制,因此在Python中通常无法使用线程获得更多的计算能力。 (例如,在C,C ++和Java中情况有所不同,例如,线程 可以提高速度。)另一方面,进程(make使用的进程)则要困难得多彼此交谈(使用共享内存,信号灯,套接字等),因为它们确实彼此独立。

在Python中,模块multiprocessingthreading提供了分别用于处理多个进程和线程的功能。

请注意,在Unix / Linux / POSIX下,除非已经非常小心,否则从已经创建线程 might easily give you deadlocks的程序中创建新的进程。 / p>