Книга: UNIX: разработка сетевых приложений
26.10. Резюме
26.10. Резюме
Создание нового потока обычно требует меньше времени, чем порождение нового процесса с помощью функции fork
. Одно это уже является большим преимуществом использования потоков на активно работающих сетевых серверах. Многопоточное программирование, однако, представляет собой отдельную технологию, требующую большей аккуратности при использовании.
Все потоки одного процесса совместно используют глобальные переменные и дескрипторы, тем самым эта информация становится доступной всем потокам процесса. Но совместное использование информации вносит проблемы, связанные с синхронизацией доступа к разделяемым переменным, и поэтому нам следует использовать примитивы синхронизации технологии Pthreads — взаимные исключения и условные переменные. Синхронизация доступа к совместно используемым данным — необходимое условие почти для любого приложения, работающего с потоками.
При разработке функций, которые могут быть вызваны таким приложением, нужно учитывать требование безопасности в многопоточной среде. Это требование выполнимо при использовании собственных данных потоков (thread-specific data), пример которых мы показали при рассмотрении функции readline
в этой главе.
К модели потоков мы вернемся в главе 30, где сервер при запуске создает пул потоков. Для обслуживания очередного клиентского запроса используется любой свободный поток.
- 26.1. Введение
- 26.2. Основные функции для работы с потоками: создание и завершение потоков
- 26.3. Использование потоков в функции str_cli
- 26.4. Использование потоков в эхо-сервере TCP
- 26.5. Собственные данные потоков
- 26.6. Веб-клиент и одновременное соединение (продолжение)
- 26.7. Взаимные исключения
- 26.8. Условные переменные
- 26.9. Веб-клиент и одновременный доступ
- 26.10. Резюме
- Упражнения