Потоки vs процессы (pthreads vs fork)

Модератор: Модераторы разделов

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Потоки vs процессы

Сообщение serzh-z »

Не один раз встречалось упоминание (последний раз подобное услышал в книге Р. Лава), что в Linux нет поток, но они-то, в принципе и нафик не нужны, благодаря тому, что O(1)-планировщик очень быстрый и переключение контекта процесса ничуть не затратнее, чем переключение в другой поток...

Сомневаться в словах одного из разработчиков ядра не хочется, но тогда возникает вопрос - для чего же было реализовывать LinuxThreads, NTPL и т.д.?

Есть какие-то дельные соображения на этот счет?
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: Потоки vs процессы

Сообщение polachok »

как нэт поток, есть поток! в общем я как-то не понял... где поток правда нэт так это в openbsd :)
есть хотя бы 1 причина реализации потоков - они входят в SUS
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Потоки vs процессы

Сообщение Asgard »

в 2.4 действительно использовались процессы вместо потоков, те поток был = процессу, в более поздних версиях воспользовались всеми преимуществами абстракции clone и реализовали потоки в их привычном состоянии, те в виде клонов, которые шарят больше даты с предком,

теоритически такие вот потоки использовать выгоднее(в ряде случаев), нежели процессы в плане производитльности, не смотря на технологию "copy on write", хотя на практике все может оказаться иначе, как это часто бывает.
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
Макс Лапшин
Сообщения: 6
ОС: MacOSX

Re: Потоки vs процессы

Сообщение Макс Лапшин »

Долгое время в линуксе потоки были не совсем классическими потоками. Под них заводились отдельные записи в таблице процессов. Т.е. существует N потоков и N виртуальных процессов, некоторые из которых могут разделять память, образуя M (M <= N) процессов.

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

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

Зеленые нити — это виртуальные потоки. Программа разбивается на небольшие атомарные действия и шедулинг прячется прямо в ней. Так, например, работают потоки в руби.
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Потоки vs процессы

Сообщение halturin »

если необходимо потом разделять память между родителем и потомком, то лучше юзать потоки. для потоков будет одно адресное пространство.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Потоки vs процессы

Сообщение serzh-z »

Убиться апстену... Человеки, что тут за нафиг???

Я спросил - существует ли преимущество (в скорости, в стабильности) при использовании NPTL (там где требует распараллеливание) или же обычное форканье в текущих версиях ядра Linux ничуть не хуже? Насколько хороша реализация pthreads в NPTL?

Почему-то в Apache (во всех виденных мною сборках (не считая для WinNT)), по умолчанию используется многопроцессный модуль MPM, но никак не многопотоковый. И остальные разработчики, как мне показалось, в некотором роде игнорируют pthreads. Разработчики ядра (2.6) утверждают, что у нас и так планировщик супер-пупер - и не нужны нам ваши Гаваи. Это ведь о чем-то говорит? Может NGTL/NPTL еще не готовы для ядра 2.6 и в них нет особенного смысла?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Потоки vs процессы

Сообщение elide »

Почему-то в Apache (во всех виденных мною сборках (не считая для WinNT)), по умолчанию используется многопроцессный модуль MPM
видно потому, что fork() работает везде. а pthreads где-то может и не быть...
вообще, потоки работают _не медленнее_ отдельных процессов. т.е. либо "так же", либо "быстрее". "так же" они могут работать в том случае, если они реализуются системой как процессы.
во всех остальных случаях переключение потоков всегда реализуется быстрее переключения процессов. хотя бы потому, что контекст потока гораздо "легче" контекста процесса.
поэтому, если ты готов взять на себя дополнительную нагрузку по написанию нормального потокобезопасного кода, всегда и везде стоит использовать потоки. если не готов - процессы обеспечивают прекрасную изоляцию.
слава роботам!
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Потоки vs процессы

Сообщение serzh-z »

elide писал(а):
11.01.2007 00:09
во всех остальных случаях переключение потоков всегда реализуется быстрее переключения процессов
Угу, сенкс, elide - а есть ли четкие ссылки на инфу (язык изложения информации - без разницы), где достоверно и достаточно понятно описывается реализация переключения контекста потоков в pthreads (я так понимаю, что phreads == NPTL, и есть патч для vanilla-ядра Linux?) Linux и/или (?) в glibc?
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Потоки vs процессы

Сообщение halturin »

здесь flook рассказывал про работу потоков и процессов.
Кое-что об устройстве ядра

на счет док глянь здесь
http://www-128.ibm.com/developerworks/linu...-threading.html

тама внизу ссылки еще есть, среди них редхатовский пдфник, тоже болеменее внятный..
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Потоки vs процессы

Сообщение serzh-z »

О, - всегда уважал статьи IBM. Кажется, что эти, про потоки, на первый взгляд, вполне дельные, как и остальные. Спасибо за линки.

Ну а размышления Флука, разумеется, ранее читал.
Спасибо сказали: