Будет ли процесс процессора иметь хотя бы один поток? - PullRequest
8 голосов
/ 04 февраля 2011

Мне известно, что потоки используются для многозадачности и имеют малый вес. Но я сомневаюсь, что мне нужен процесс без какой-либо многозадачности. Я только что создал процесс. Теперь ЦП будет ассоциировать один процесс с процессом ИЛИ будет ли он выполнять процесс без необходимости иметь поток?

Пожалуйста, уточните.

С уважением, Хариш

Ответы [ 2 ]

11 голосов
/ 04 февраля 2011

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

Затем этот поток может свободно создавать и создавать другие потоки, принадлежащие процессу.

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


Например, в ядре Linux создание процесса мало отличается от создания нового потока. Это потому, что ядро ​​планирует потоки, а не процессы.

Процессы теперь считаются группами потоков с одинаковым идентификатором группы потоков (TGID), причем TGID является идентификатором потока (TID) первого потока, созданного для этого процесса.

Когда вы fork или vfork или clone (без CLONE_THREAD), вы получаете новый поток с новым TID, и TGID устанавливается на этот TID - это новый процесс.

Когда вы clone с CLONE_THREAD, вы получаете новый поток с новым TID, но TGID остается таким же, как ваш клонер. Это другой поток в том же процессе.

Вот так Linux (в качестве примера) различает процессы и потоки, не делая планировщик слишком сложным. Планировщик может по своему усмотрению полностью игнорировать группы потоков. Это на самом деле невероятно умно.

Для кодирования вне планировщика, группа потоков с одинаковым TGID считается процессом.

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

2 голосов
/ 14 февраля 2011

Процесс - это поток.

Когда процесс начинается, он начинается с одного потока.

До дней многопоточности термин поток был ненужным, потому что выне может иметь процесс с более чем одним потоком.

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

...