【问题标题】:Is there any utils to control the amount of thread when executing binary?执行二进制文件时是否有任何工具可以控制线程数量?
【发布时间】:2023-04-07 08:12:01
【问题描述】:

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

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

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

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

linux中有没有像-j这样的有用的工具来控制线程的数量呢?

【问题讨论】:

  • 没有。 (此空间特意留空)
  • 另外,-j 选项与线程无关。

标签: linux multithreading optimization core execution


【解决方案1】:

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

make 计算目标的依赖树。大多数目标将依赖于多个输入,例如由多个部分构建的可执行文件,例如编译成 .o 文件的 .c 文件。 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 的程序创建新的进程

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多