LINUX.ORG.RU

Потоки в Linux


0

0

Потоки в Линуксе реализованы как процессы, т.е. при создании потока в системе появляется новый процесс в котором выполняется новый поток. Означает ли это, что ограничение на кол-во процессов скажется на потоки. Допустим мне разрешено запускать максимум 10 процессов, то значит макс. кол-во потоков тоже 10?

anonymous

>Потоки в Линуксе

В "линуксе" ничто никуда не течет. Есть нити (threads).

>реализованы как процессы, т.е. при создании потока в системе появляется новый процесс в котором выполняется новый поток.

Бред. При создании нити создается нить.

>Допустим мне разрешено запускать максимум 10 процессов, то значит макс. кол-во потоков тоже 10

В Linux нет ограничений на процессы. Есть ограничения RLIMIT_NPROC и /proc/sys/kernel/threads-max - на нити.

anonymous
()
Ответ на: комментарий от anonymous

> В Linux нет ограничений на процессы. Есть ограничения RLIMIT_NPROC и /proc/sys/kernel/threads-max - на нити.

В limits.conf есть. А вообще на ядре для ARM с buildroot.org наблюдал ситуацию, когда thread'ы были видны в ps как отдельные процессы.

anonymous
()

>т.е. при создании потока в системе появляется новый процесс в котором выполняется новый поток.

так было до NTPL которая появилась в RH ядрах начиная с RH 9.0 ну и в ванильных ядрах начиная с 2.6

Reset ★★★★★
()
Ответ на: комментарий от anonymous

Каждый поток имеет структуру task_struct и рассматривается ядром как обычный процесс совместно использующий ресурсы с другими процессами.

anonymous
()
Ответ на: комментарий от anonymous

> Каждый поток имеет структуру task_struct и рассматривается ядром как обычный процесс совместно использующий ресурсы с другими процессами.

ack бо модель то 1:1

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

Мистер не слышал о ядрах 2.4.х ?

anonymous
()
Ответ на: комментарий от anonymous

>В limits.conf есть. А вообще на ядре для ARM с buildroot.org наблюдал ситуацию, когда thread'ы были видны в ps как отдельные процессы.

В limits.conf прописаны rlimits, которые, как я писал выше, ограничивают число нитей.

>Каждый поток имеет структуру task_struct и рассматривается ядром как обычный процесс совместно использующий ресурсы с другими процессами.

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

>Мистер не слышал о ядрах 2.4.х ?

Вообще-то, для особо хорошо слышащих, нитевая поддержка в ядрах 2.4 появилась довольно давно. Уже RH9 шел штатно с NPTL, правда, в нем и ядро и glibc были не совсем vanilla.

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

>ack бо модель то 1:1

И что с того? Раз "1:1" - так уже не нити, а "процессы" как пишет умный anonymous? Вы книжки вдумчивее листайте...

anonymous
()
Ответ на: комментарий от anonymous

Немного дополню и уточню, дабы избежать ненужного флуда.

Нить не может быть процессом, а процесс нитью - по определению процесса и нити. Так что тут все просто. Если нити есть, то это нити. Если процессы есть, то это процессы. В ранних 2.4 была проблема с тем, что сейчас реализуется через thread группы, поэтому было невозможно создать "полноценную" POSIX нить, можно было создать либо процесс, либо гибрид процесса и нити. Это было исправлено в районе 2.4.20. И сейчас в Linux есть абсолютно полноценные процессы и абсолютно полноценные нити. ps - специфическая системная вещь и, вероятно, в упомянутом случае с ARM она не научилась нормально работать с /proc. Что до ядра, то вопрос о конкретной реализации им процессов и нитей, не имеет значения при выяснении наличия самих процессов и нитей. Единица диспетчеризации task организована так, что через нее можно получить полный доступ к текущему контексту (то, что POSIX относит и к процессу и к нити), при этом она сама по себе не является ни процессом, ни нитью.

Что до гибридов, то нормальные нитевые библиотеки их создавать не должны и их в свою очередь следует рассматривать Linux-specific хаком (по отношению к POSIX).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.