#c #multithreading #process #operating-system
#c #Многопоточность #процесс #операционная система
Вопрос:
Должен ли в процессе быть хотя бы один поток? Возможно ли, чтобы процесс был лишен каких-либо потоков, или это не имеет смысла?
Комментарии:
1. Я думаю, лучшим названием было бы «Процесс с нулевой поточностью?»
2. Понятие процесса на много лет опередило понятие потока. Поток не считался основным объектом операционной системы до ~ 1992 года. Требование WinNT и священная война между поставщиками Unix. Все вышли из бизнеса, так что теперь это безопасно: да, процесс имеет хотя бы один поток.
3. Итак, в общем, будет ли процесс с нулевым потоком по существу конечным автоматом?
Ответ №1:
Процесс обычно имеет хотя бы один поток. В Википедии есть определение:
поток выполнения — это наименьшая единица обработки, которая может быть запланирована операционной системой. Реализация потоков и процессов отличается в разных операционных системах, но в большинстве случаев поток содержится внутри процесса.
MSDN поддерживает это:
Процессор выполняет потоки, а не процессы, поэтому каждое приложение имеет хотя бы один процесс, а процесс всегда имеет хотя бы один поток выполнения, известный как основной поток.
Хотя он продолжает говорить:
Процесс может иметь ноль или более однопоточных квартир и ноль или одну многопоточную квартиру.
Это означает, что если количество однопоточных и многопоточных квартир может быть равно нулю. Тем не менее, этот процесс мало что даст 🙂
Ответ №2:
В Unix-подобных операционных системах возможно иметь процесс-зомби, в котором запись все еще существует в таблице процессов, даже если потоков (больше) нет.
Комментарии:
1. Это правильно, хотя вы бы не написали программу, единственной целью которой является создание процесса-зомби. 1
2. будет ли процесс с нулевым потоком по существу конечным автоматом?
3. Возможно, конечный автомат в остановленном состоянии; он определенно ничего не может вычислить…
Ответ №3:
Вы можете отказаться от использования явной библиотеки потоков или операционной системы, которая не имеет понятия потоков (и поэтому не называет это потоком), но для большинства современных программ все программы имеют по крайней мере один поток выполнения (обычно называемый основным потоком или потоком пользовательского интерфейса или подобным). Если это завершается, завершается и процесс.
Мысленный эксперимент: что будет делать процесс с нулевыми потоками выполнения?
Ответ №4:
Теоретически, я не понимаю, почему нет. Но это было бы невозможно с популярными операционными системами.
Процесс обычно состоит из нескольких разных частей:
- Ветки
- Пространство памяти
- Дискрипторы файлов
- Среда (корневой каталог, текущий каталог и т.д.)
- Привилегии (UID и т.д.)
- Et cetera
Теоретически процесс может существовать без потоков в качестве сервера RPC. Другие процессы будут выполнять вызовы RPC, которые порождают потоки в серверном процессе, а затем потоки исчезают при возврате функции. Я не знаю ни одной операционной системы, которая работает таким образом.
В большинстве операционных систем процесс завершается либо при завершении последнего потока, либо при завершении основного потока.
Примечание: это игнорирует «бесполезные» случаи, такие как процессы-зомби, которые не имеют потоков, но ничего не делают.
Ответ №5:
«main» сам по себе является потоком. Это поток, который выполняется. Итак, каждый процесс выполняется по крайней мере в одном потоке.