Процессы и потоки. (Как реализованы потоки в *nix)

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

Аватара пользователя
NorthDragon
Сообщения: 62
ОС: ArchLinux

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

Сообщение NorthDragon »

Я начал изучать книгу "Unix изнутри" Вахалия.
В ней рассказывается о unix-системах и про потоки(нити) говорится следующее
Что есть три типа нитей
- нити ядра (не привязаны к конкретному процессу внутрисистемные)
- Легковесные процесс(LightWeightProcess) прикладные нити поддерживаемые ядром юникса. Не подходят для параллельного программирования т.к при их создании уничтожении происходит большая трата ресурсов.
- Прикладные нити. это нити реализованные третьесторонними бибилиотеками.

Возник вопрос соответствует ли это положению дел в сегодняшнем ядре linux'а. Потому что если это так то фактически в ядре отсутствует нормальная поддержка многопоточности. Если да то какие библиотеки сейчас используются для работы с потоками?

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

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

Сообщение polachok »

NPTL = Native POSIX threads library. не то случайно? :)
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
NorthDragon
Сообщения: 62
ОС: ArchLinux

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

Сообщение NorthDragon »

Не знаю честно говоря :)
Сейчас буду гуглить.
В это книге говорится о следующих прикладных библиотеках -
- C-threads
- pthreads(стандарт POSIX)
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

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

Сообщение polachok »

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

man pthread.

NAME
pthread -- POSIX thread functions

LIBRARY
POSIX Threads Library (libpthread, -lpthread)
1:1 Threading Library (libthr, -lthr)
Reentrant C Library (libc_r, -lc_r)
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

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

Сообщение ilich »

Мне пару раз приходилось использовать pthreads. Библиотечка довольно актуальная и хорошо проработанная. Так что могу сказать, что работать с ней одно удовольствие. Интерфейс чисто С-шный. Если кому нужны С++-ые обертки, то на sf их довольно много. Я парочку тестировал. Названия правда не помню, но они мне не понравились. Так что pthreads рулит! :thumbsup:
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

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

Сообщение t.t »

Могу ещё посоветовать почитать лекции курса "программирование в стандарте POSIX" на http://www.intuit.ru -- там, я думаю, тоже должно об этом быть.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

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

Сообщение ilich »

Я бы порекомендовал прочитать книгу Моли .Б "Unix / Linux .Теория и практика программирования "
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

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

Сообщение d_Sun »

(ilich @ Четверг, 18 Августа 2005, 8:19) писал(а):Я бы порекомендовал прочитать книгу Моли .Б "Unix / Linux .Теория и практика программирования "


Да - очень хорошая книга, для начинающих. Но вот по потокам там очень мало...
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

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

Сообщение flook »

В 2.6 ядре есть вызов clone (он был и в 2.4), который и рулит созданием "деток" у процессов. Известный вызов fork - это тот-же clone, но с заранее определенными флагами. Так вот. Когда зовется clone, то происходит создание нового процесса. Ни потока, ни нити, ни чего бы то ни было. Разница между потоком и процессом-потомком достигается за счет разделения (share) адресных пространств потомка и предка и того, чего пожелает библиотека, через которую вызывается clone (да, да - pthread_create зовет clone). Какие флаги передаются в clone - надо strace-ить - сам я не смотрел этого еще :) Плюс ко всему в 2.6 ядре переворочена подсистема управления pid/tgig и прочими id-ами процессов. Так например вызов getpid в 2.4 ядре вертал pid, а в 2.6 - tgid процесса, за счет чего маскируется тот факт, что потоки - это процессы с разными pid-ами.
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали: