Нулевой процесс?

Должен ли процесс иметь хотя бы один поток? Возможно ли, чтобы процесс был лишен каких-либо потоков, или это не имеет смысла?

Ответ 1

Процесс обычно имеет по крайней мере один поток. Wikipedia имеет определение:

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

MSDN поддерживает это:

Процессор выполняет потоки, а не процессы, поэтому каждое приложение имеет хотя бы один процесс, и процесс всегда имеет хотя бы один поток выполнения, известный как основной поток.

Хотя он продолжает говорить:

Процесс может иметь ноль или несколько однопоточных квартир и ноль или одну многопоточную квартиру.

Это означает, что если количество однопоточных квартир и многопоточных квартир может быть равным нулю. Однако этот процесс не будет делать многого:)

Ответ 2

Вы можете не использовать явную библиотеку потоков или операционную систему, которая не имеет понятия потоков (и поэтому не называет ее нитью), но для большинства современных программ все программы имеют по крайней мере один поток выполнения (обычно называемый основной нитью или потоком пользовательского интерфейса или аналогичным). Если это произойдет, то и процесс.

Мысленный эксперимент: что бы делал процесс с нулевыми потоками выполнения?

Ответ 3

В Unix-подобных операционных системах возможно создание процесса зомби, где запись все еще существует в таблице процессов, даже если есть no (дольше) любых потоков.

Ответ 4

В теории я не понимаю, почему нет. Но это было бы невозможно в популярных операционных системах.

Процесс обычно состоит из нескольких разных частей:

  • Темы
  • Память
  • Дескрипторы файлов
  • Среда (корневой каталог, текущий каталог и т.д.)
  • Привилегии (UID и т.д.)
  • Et cetera

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

В большинстве ОС процесс завершается либо при выходе последнего потока, либо при выходе основного потока.

Примечание. Это игнорирует "бесполезные" случаи, такие как процессы зомби, которые не имеют потоков, но ничего не делают.

Ответ 5

"main" - это поток. Это поток, который выполняется. Таким образом, каждый процесс выполняется, по крайней мере, в одном потоке.