Не один раз встречалось упоминание (последний раз подобное услышал в книге Р. Лава), что в Linux нет поток, но они-то, в принципе и нафик не нужны, благодаря тому, что O(1)-планировщик очень быстрый и переключение контекта процесса ничуть не затратнее, чем переключение в другой поток...
Сомневаться в словах одного из разработчиков ядра не хочется, но тогда возникает вопрос - для чего же было реализовывать LinuxThreads, NTPL и т.д.?
Есть какие-то дельные соображения на этот счет?
Потоки vs процессы (pthreads vs fork)
Модератор: Модераторы разделов
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
polachok
- Бывший модератор
- Сообщения: 2199
- Статус: главный форумный маргинал
- ОС: gnu/linux
Re: Потоки vs процессы
как нэт поток, есть поток! в общем я как-то не понял... где поток правда нэт так это в openbsd 
есть хотя бы 1 причина реализации потоков - они входят в SUS
есть хотя бы 1 причина реализации потоков - они входят в SUS
И немедленно выпил.
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: Потоки vs процессы
в 2.4 действительно использовались процессы вместо потоков, те поток был = процессу, в более поздних версиях воспользовались всеми преимуществами абстракции clone и реализовали потоки в их привычном состоянии, те в виде клонов, которые шарят больше даты с предком,
теоритически такие вот потоки использовать выгоднее(в ряде случаев), нежели процессы в плане производитльности, не смотря на технологию "copy on write", хотя на практике все может оказаться иначе, как это часто бывает.
теоритически такие вот потоки использовать выгоднее(в ряде случаев), нежели процессы в плане производитльности, не смотря на технологию "copy on write", хотя на практике все может оказаться иначе, как это часто бывает.
-
Макс Лапшин
- Сообщения: 6
- ОС: MacOSX
Re: Потоки vs процессы
Долгое время в линуксе потоки были не совсем классическими потоками. Под них заводились отдельные записи в таблице процессов. Т.е. существует N потоков и N виртуальных процессов, некоторые из которых могут разделять память, образуя M (M <= N) процессов.
Такая схема проста в реализации, но приводит к некоторым нестыковкам.
В реальности, работа с потоками сверхсложна. Какой либо обмен информацией между ними всегда является источником трудноуловимых ошибок, как правило не повторяемых. deadlock-и, ошибки синхронизации, сборка мусора — это все просто ночной кошмар. Поэтому по возможности, гораздо проще и быстрее либо использовать т.е. зеленые нити + раздельные процессы.
Зеленые нити — это виртуальные потоки. Программа разбивается на небольшие атомарные действия и шедулинг прячется прямо в ней. Так, например, работают потоки в руби.
Такая схема проста в реализации, но приводит к некоторым нестыковкам.
В реальности, работа с потоками сверхсложна. Какой либо обмен информацией между ними всегда является источником трудноуловимых ошибок, как правило не повторяемых. deadlock-и, ошибки синхронизации, сборка мусора — это все просто ночной кошмар. Поэтому по возможности, гораздо проще и быстрее либо использовать т.е. зеленые нити + раздельные процессы.
Зеленые нити — это виртуальные потоки. Программа разбивается на небольшие атомарные действия и шедулинг прячется прямо в ней. Так, например, работают потоки в руби.
-
halturin
- Сообщения: 167
- ОС: Linux
Re: Потоки vs процессы
если необходимо потом разделять память между родителем и потомком, то лучше юзать потоки. для потоков будет одно адресное пространство.
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Потоки vs процессы
Убиться апстену... Человеки, что тут за нафиг???
Я спросил - существует ли преимущество (в скорости, в стабильности) при использовании NPTL (там где требует распараллеливание) или же обычное форканье в текущих версиях ядра Linux ничуть не хуже? Насколько хороша реализация pthreads в NPTL?
Почему-то в Apache (во всех виденных мною сборках (не считая для WinNT)), по умолчанию используется многопроцессный модуль MPM, но никак не многопотоковый. И остальные разработчики, как мне показалось, в некотором роде игнорируют pthreads. Разработчики ядра (2.6) утверждают, что у нас и так планировщик супер-пупер - и не нужны нам ваши Гаваи. Это ведь о чем-то говорит? Может NGTL/NPTL еще не готовы для ядра 2.6 и в них нет особенного смысла?
Я спросил - существует ли преимущество (в скорости, в стабильности) при использовании NPTL (там где требует распараллеливание) или же обычное форканье в текущих версиях ядра Linux ничуть не хуже? Насколько хороша реализация pthreads в NPTL?
Почему-то в Apache (во всех виденных мною сборках (не считая для WinNT)), по умолчанию используется многопроцессный модуль MPM, но никак не многопотоковый. И остальные разработчики, как мне показалось, в некотором роде игнорируют pthreads. Разработчики ядра (2.6) утверждают, что у нас и так планировщик супер-пупер - и не нужны нам ваши Гаваи. Это ведь о чем-то говорит? Может NGTL/NPTL еще не готовы для ядра 2.6 и в них нет особенного смысла?
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Потоки vs процессы
видно потому, что fork() работает везде. а pthreads где-то может и не быть...Почему-то в Apache (во всех виденных мною сборках (не считая для WinNT)), по умолчанию используется многопроцессный модуль MPM
вообще, потоки работают _не медленнее_ отдельных процессов. т.е. либо "так же", либо "быстрее". "так же" они могут работать в том случае, если они реализуются системой как процессы.
во всех остальных случаях переключение потоков всегда реализуется быстрее переключения процессов. хотя бы потому, что контекст потока гораздо "легче" контекста процесса.
поэтому, если ты готов взять на себя дополнительную нагрузку по написанию нормального потокобезопасного кода, всегда и везде стоит использовать потоки. если не готов - процессы обеспечивают прекрасную изоляцию.
слава роботам!
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Потоки vs процессы
Угу, сенкс, elide - а есть ли четкие ссылки на инфу (язык изложения информации - без разницы), где достоверно и достаточно понятно описывается реализация переключения контекста потоков в pthreads (я так понимаю, что phreads == NPTL, и есть патч для vanilla-ядра Linux?) Linux и/или (?) в glibc?
-
halturin
- Сообщения: 167
- ОС: Linux
Re: Потоки vs процессы
здесь flook рассказывал про работу потоков и процессов.
Кое-что об устройстве ядра
на счет док глянь здесь
http://www-128.ibm.com/developerworks/linu...-threading.html
тама внизу ссылки еще есть, среди них редхатовский пдфник, тоже болеменее внятный..
Кое-что об устройстве ядра
на счет док глянь здесь
http://www-128.ibm.com/developerworks/linu...-threading.html
тама внизу ссылки еще есть, среди них редхатовский пдфник, тоже болеменее внятный..
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Потоки vs процессы
О, - всегда уважал статьи IBM. Кажется, что эти, про потоки, на первый взгляд, вполне дельные, как и остальные. Спасибо за линки.
Ну а размышления Флука, разумеется, ранее читал.
Ну а размышления Флука, разумеется, ранее читал.