The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Реализация потоков в Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Реализация потоков в Linux"  
Сообщение от Smjbv (ok) on 22-Июл-06, 07:15 
Здравствуйте, уважаемое Linux-сообщество!!!

Начал изучать программирование под Linux.
До настоящего времени программировал под Windows.
Сейчас изучаю материал по разработке многопоточных приложений. Но как-то все туманно по этой теме. Как я понял, есть стандарт на API поддержки потоков – POSIX 1996. Затем наткнулся на инфу о библиотеках реализации неких пользовательских потоков. Затем слышал, что реализация поддержки многопоточности под Linux несколько кривовато, подглючивают проги, реализованные с использованием многопоточности.

Подскажите, на что ориентироваться в этом вопросе??? Помогите пожалуйста дополнительной инфой и рекомендациями! Хотелось бы иметь возможность работы с потоками как это реализовано в Windows, т.е. потоки работают в рамках одного процесса (используют одно адресное пространство), потоки диспетчируются ядром, какие-либо системные вызовы в одном потоке никак не влияют на другие потоки, потоки располагают достаточными средствами синхронизации (хотя бы какие-нибудь критические секции) и т.д.

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Реализация потоков в Linux"  
Сообщение от Steck (??) on 23-Июл-06, 05:21 
Смотрите в сторону pthread pthread_create() pthread_join() и т.д
много по этой теме можно найти в man pthread
Более детально в книге UNIX: взаимодействие процессов
Уильям Стивенс

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Реализация потоков в Linux"  
Сообщение от DeadMustdie email(??) on 23-Июл-06, 15:21 
>Здравствуйте, уважаемое Linux-сообщество!!!
>
>Начал изучать программирование под Linux.
>До настоящего времени программировал под Windows.
>Сейчас изучаю материал по разработке многопоточных приложений.
>Но как-то все туманно по этой теме. Как я понял, есть стандарт
>на API поддержки потоков – POSIX 1996.

SUSv3 поможет: http://www.unix.org/version3/online.html
Там надо сперва зарегистрироваться, потом можно скачать. В числе прочих
материалов приведено полное описание API для разработки многопоточных
программ. Соответственно, интересовать Вас будут функции, название
которых начинается с 'pthread_'.

>Затем наткнулся на инфу о библиотеках реализации неких пользовательских
>потоков. Затем слышал, что реализация поддержки многопоточности под
>Linux несколько кривовато, подглючивают проги, реализованные с
>использованием многопоточности.

Во всех известных мне UNIX-системах pthreads представляет собой обвертку над
собственной (системно-специфичной) реализацией многопоточности. Качество
реализации как собственных механизмов, так и "стандартизирующей" обвертки
бывает разным. До относительно недавнего времени в Linux рекомая обвертка
(под названием LinuxThreads) была, скажем так, своеобразной. Однако сейчас
ситуация изменилась, и любой более-менее свежий дистрибутив идет с весьма
достойной и качественной поддержкой pthread'ов.

>Подскажите, на что ориентироваться в этом вопросе???

Ориентироваться лучше всего на стандарт. Тогда написанные в итоге программы
смогут работать без существенных изменений практически в любой UNIX-системе
(Solaris, HP-UX, AIX, ...).

>Хотелось бы иметь возможность работы с потоками как это реализовано
>в Windows, т.е. потоки работают в рамках одного процесса (используют одно
>адресное пространство),

Это обязательное свойство любой реализации pthreads.

>потоки диспетчируются ядром,

А это уже детали, которые едва ли окажут значимое влияние на работу Ваших
приложений. Схемы диспетчеризации бывают очень различными. В Solaris, например,
до недавнего времени по умолчанию использовалась схема NxM, когда N
пользовательских потоков исполнялось M потоками ядра.

>какие-либо системные вызовы в одном потоке никак не влияют на другие потоки,

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

Некоторую аккуратность необходимо соблюдать в обработке сигналов. Я обычно завожу
для их обработки отдельный поток, и ловлю их в нем sigwait()ом - а обработку
по умолчанию запрещаю pthread_sigmask()ом. Впрочем, дело вкуса.

>потоки располагают достаточными средствами синхронизации
>(хотя бы какие-нибудь критические секции) и т.д.

Мьютексы (pthread_mutex_init) и условия (pthread_cond_init) позволяют организовать
практически любую дисциплину синхронизации при доступе к общим ресурсам.

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

Не работать с системами, основанными на LinuxThreads. Использовать свежее ядро
и свежую glibc.

>Работать собираюсь под дистрами RedHat и CentOS.

Главное, чтобы не старых версий.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Реализация потоков в Linux"  
Сообщение от Smjbv (ok) on 24-Июл-06, 02:28 
Отлично! Спасибо за такой развернутый ответ!!!
Вы меня реально успокоили :), тепеть я со спокойной душой могу приступить к детальному изучению потоков :)
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Реализация потоков в Linux"  
Сообщение от pup (ok) on 31-Июл-06, 20:25 
>>какие-либо системные вызовы в одном потоке никак не влияют на другие потоки,
>
>Недостижимое свойство, в том числе и в Windows. Например, дескрипторы файлов
>глобальны для процесса, и закрыв файл в одном потоке, Вы не сможете
>продолжать
>работать с ним в другом.

не знаю как в вендовс обстоят дела с файловыми дескрипторами, а в линукс есть clone, и флаг к нему CLONE_FILES ;)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Реализация потоков в Linux"  
Сообщение от DeadMustdie email(??) on 04-Авг-06, 21:16 
>не знаю как в вендовс обстоят дела с файловыми дескрипторами, а в
>линукс есть clone, и флаг к нему CLONE_FILES ;)

Клоуны - это нездоровый низкоуровневый гибрид процесса с потоком.
В принципе удобно, но
(а) Linux-специфично
(б) IMHO провоцирует ошибки из-за возросшей сложности при выборе уровня изоляции

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру