make
有 -j
标志,这使得 make
处理速度更快。make
允许生成所提供数量的“线程”的信息。-j
的选项?
例如,假设我想更快地执行我的 python 脚本。
$ python myprogram.py -j4 // <--?
linux中有没有像
-j
那样有用的utils来控制线程数量?
程序的并行化必须由程序员而不是用户来完成。
make
计算目标的依赖树。大多数目标将依赖于多个输入,例如由多个部分构建的可执行文件,例如编译为 .o 文件的 .c 文件。 make
的开发者理解了这一点,并使用依赖树,他们编写了make
,这样它就可以弄清楚哪些部分可以彼此独立地准备,并且-j4
告诉它并行准备4个,例如开始4 个并行编译器进程(不是线程!)。
为了加速你的Python程序,你自己需要确定可以相互独立执行的部分,这完全取决于你的Python程序解决的问题的具体情况;没有通用的解决方案,许多问题很难并行化。
并行化有两种形式:进程和线程。线程共享它们的内存(堆栈除外),并且在 Python 中受到“全局解释器锁 (GIL)”的限制,因此在 Python 中通常不可能使用线程获得更多计算能力。 (例如,在 C、C++ 和 Java 中情况就不同,线程可以让你加速。)另一方面,进程(由make
使用)彼此交谈要困难得多(使用共享内存、信号量、套接字等),因为它们确实彼此独立。
在 Python 中,模块
multiprocessing
和
threading
分别提供处理多个进程和线程的功能。 请注意,在 Unix/Linux/POSIX 下,从已创建线程