Многопроцессорная обработка внутри дочернего потока

1

Я узнал о многопроцессорной обработке и многопоточности.

Насколько я понимаю, потоки выполняются на одном ядре, поэтому мне было интересно, могу ли я создать несколько процессов внутри дочернего потока, они будут ограничены этим ядром?

Я использую python, так что это вопрос об этом конкретном языке, но я хотел бы знать, совпадает ли это с другими языками?

  • 0
    Интересный вопрос. Отвечает ли это на ваш вопрос? Multi-Processing vs Multi-Threading Python
  • 0
    если вы создадите подпроцесс (разветвление) из процесса с многопоточностью, все подпроцессы будут недействительными в подпроцессе, но да, вы можете использовать более одного ядра с этими подпроцессами.
Показать ещё 1 комментарий
Теги:
multithreading
multiprocessing
python-multiprocessing
python-multithreading

2 ответа

1
Лучший ответ

Я не эксперт по pyhton, но я ожидаю, что это похоже на другие языки, потому что это ОС в целом.

Процесс

Операция выполняется ОС и имеет один поток, который будет выполнен. Это вообще ваша программа. Вы можете запустить больше потоков внутри своего процесса, чтобы выполнить тяжелые вычисления или что-то еще, что вам нужно сделать. Но они принадлежат процессу.

Нить

Один или несколько потоков принадлежат процессу, и выполнение будет распределено по всем ядрам.

Теперь на ваш вопрос

Когда вы создаете определенное количество потоков, эти потоки должны быть распределены по всем вашим ядрам. Они не ограничены ядром, выполняющим фитон-интерпретатор. Даже когда вы создаете подпроцесс из вашего фитон-кода, процесс может и должен работать на других ядрах.

Вы можете больше узнать о концепции gernal: Упреждающая многозадачность

Есть несколько библиотек на разных языках, которые абстрагируют поток к чему-то, часто называемому "Задачей" или чем-то другим. Для этих особых случаев возможно, что они просто запущены внутри потока, в котором они были созданы. Например. В мире DotNet есть Тема и Задача. Часто люди злоупотребляют термином "поток", когда они говорят о задаче, которая в общем работает в потоке, который был создан.

0

Каждая программа представляется через один процесс. Процесс - это контекст выполнения, в котором работает один или несколько потоков. Все потоки в одном процессе имеют один и тот же транш виртуальной памяти, назначенный процессу.

Python (ссылка на CPython, например Jython и IronPython, не имеет GIL) является особенной, поскольку она имеет глобальную блокировку интерпретатора (GIL), которая предотвращает параллельный запуск многопоточного ядра на нескольких ядрах. Только код, освобождающий GIL, может работать по-настоящему параллельно (операции ввода-вывода и некоторые C-расширения, такие как numpy). Для этого вам придется использовать модуль многопроцессорности для cpu-связанного кода python, который вам нужно запустить параллельно. Процессы startet с модулем многопроцессорности затем будут запускать собственный экземпляр интерпретатора python, чтобы вы могли обрабатывать код по-настоящему параллельно.

Обратите внимание, что даже однопотоковое python-приложение может работать на разных ядрах, а не параллельно, но последовательно, в случае, если ОС перераспределяет выполнение в другое ядро после переключения контекста.

Вернуться к вашему вопросу:

если я создам несколько процессов внутри дочернего потока, они будут ограничены этим ядром?

Вы не создаете процессы внутри потока, вы создаете новые независимые процессы python с теми же ограничениями исходного процесса python и на каких ядрах будут выполняться потоки новых процессов вплоть до ОС (... поскольку вы долго манипулировать ядро-сродством процесса, но не отходить туда).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню