Есть ли утилиты для контроля количества потоков при выполнении двоичного файла? - PullRequest
0 голосов
/ 16 ноября 2018

make имеет -j флаг, который делает make процесс более быстрым.
Этот флаг сообщает make информацию о том, что разрешено порождать указанное количество «потоков».

AsТаким же образом, есть ли какой-нибудь простой способ применить -j -подобную опцию для обычного выполнения?

Например, если предположить, что я хочу выполнить свой скрипт на Python быстрее.

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

Есть ли в linux полезные утилиты для контроля количества потоков, например -j do?

1 Ответ

0 голосов
/ 17 ноября 2018

Распараллеливание программы должно выполняться программистом, а не пользователем.

make вычисляет дерево зависимостей для цели.Большинство целей будет зависеть от нескольких входных данных, например, исполняемый файл, который состоит из нескольких частей, например .c-файлы, скомпилированные в .o-файлы.Разработчики make поняли это и, используя дерево зависимостей, написали make, чтобы он мог выяснить, какие части могут быть подготовлены независимо друг от друга, и -j4 велит ему подготовить 4 параллельно, например, начиная4 компилятора обрабатывает (не потоки!) Параллельно.

Чтобы ускорить вашу программу на Python, вам нужно самостоятельно определить части, которые могут быть выполнены независимо друг от друга, что будет полностью зависеть отспецифика проблемы, которую решает ваша программа на Python;общего решения не существует, и многие проблемы очень трудно распараллелить.

Распараллеливание имеет две формы: процессы и потоки .Потоки разделяют свою память (кроме стека), и в Python ограничены Global Interpreter Lock (GIL) , поэтому получение большей вычислительной мощности с использованием потоков часто невозможно в Python.(Ситуация отличается в C, C ++ и Java, например, где потоки могут ускорить процесс.) С другой стороны, процессам (используемым make) гораздо труднее разговаривать с каждымдругие (с использованием общей памяти, семафоров, сокетов и т. д.), поскольку они действительно независимы друг от друга.

В Python модули multiprocessing и threading предоставляют функциональные возможности для работы с несколькими процессами и потоками соответственно.

Имейте в виду, что в Unix / Linux / POSIX создание новых процессов из программы, которая уже создала потоков , может легко привести к блокировке если вы не очень осторожны.

...