Глава 26 Программные потоки
Глава 26
Программные потоки
26.1. Введение
Согласно традиционной модели Unix, когда процессу требуется, чтобы некое действие было выполнено каким-либо другим объектом, он порождает дочерний процесс, используя функцию fork, и этим порожденным процессом выполняется необходимое действие. Большинство сетевых серверов под Unix устроены именно таким образом, как мы видели при рассмотрении примера параллельного (concurrent) сервера: родительский процесс осуществляет соединение с помощью функции accept и порождает дочерний процесс, используя функцию fork, а затем дочерний процесс занимается обработкой клиентского запроса.
Хотя эта концепция с успехом использовалась на протяжении многих лет, с функцией fork связаны определенные неудобства.
? Стоимость функции fork довольно высока, так как при ее использовании требуется скопировать все содержимое памяти из родительского процесса в дочерний, продублировать все дескрипторы и т.д. Текущие реализации используют технологию, называемую копированием при записи (copy-on-write), при которой копирование пространства данных из родительского процесса в дочерний происходит лишь тогда, когда дочернему процессу требуется своя собственная копия. Но несмотря на эту оптимизацию, стоимость функции fork остается высокой.
? Для передачи данных между родительским и дочерним процессами после вызова функции fork требуется использовать средства взаимодействия процессов (IPC). Передача информации перед вызовом fork не вызывает затруднений, так как при запуске дочерний процесс получает от родительского копию пространства данных и копии всех родительских дескрипторов. Но возвращение информации из дочернего процесса в родительский требует большей работы.
Обе проблемы могут быть разрешены путем использования программных потоков (threads). Программные потоки иногда называются облегченными процессами (lightweight processes), так как поток проще, чем процесс. В частности, создание потока требует в 10–100 раз меньше времени, чем создание процесса.
Все потоки одного процесса совместно используют его глобальные переменные, поэтому им легко обмениваться информацией, но это приводит к необходимости синхронизации.
Однако общими становятся не только глобальные переменные. Все потоки одного процесса разделяют:
? инструкции процесса;
? большую часть данных;
? открытые файлы (например, дескрипторы);
? обработчики сигналов и вообще настройки для работы с сигналами (действие сигнала);
? текущий рабочий каталог;
? идентификаторы пользователя и группы пользователей.
У каждого потока имеются собственные:
? идентификатор потока;
? набор регистров, включая счетчик команд и указатель стека;
? стек (для локальных переменных и адресов возврата);
? переменная errno;
? маска сигналов;
? приоритет.
ПРИМЕЧАНИЕ
Как сказано в разделе 11.18, можно рассматривать обработчик сигнала как некую разновидность потока. В традиционной модели Unix у нас имеется основной поток выполнения и обработчик сигнала (другой поток). Если в основном потоке в момент возникновения сигнала происходит корректировка связного списка и обработчик сигнала также пытается изменить связный список, обычно начинается путаница. Основной поток и обработчик сигнала совместно используют одни и те же глобальные переменные, но у каждого из них имеется свой собственный стек.
В этой книге мы рассматриваем потоки POSIX, которые также называются Pthreads (POSIX threads). Они были стандартизованы в 1995 году как часть POSIX.1c и будут поддерживаться большинством версий Unix. Мы увидим, что все названия функций Pthreads начинаются с символов pthread_. Эта глава является введением в концепцию потоков, необходимым для того, чтобы в дальнейшем мы могли использовать потоки в наших сетевых приложениях. Более подробную информацию вы можете найти в [15].
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
ГЛАВА 7 Потоки и планирование выполнения
ГЛАВА 7 Потоки и планирование выполнения Основной единицей выполнения в Windows является поток, и одновременно несколько потоков могут выполняться в рамках одного процесса, разделяя его адресное пространство и другие ресурсы. В главе 6 процессы ограничивались только одним
Программные окна
Программные окна Структура программных окон едина для большинства приложений, поэтому, изучив один пример, вы без труда сможете сориентироваться в окне любой программы.Рассмотрим компоненты программных окон на примере стандартного приложения Windows – текстового
Глава 31 Потоки (STREAMS)
Глава 31 Потоки (STREAMS) 31.1. Введение В этой главе мы приводим обзор потоков STREAMS и функций, используемых приложением для доступа к потоку. Наша цель — понять, как реализованы сетевые протоколы в рамках потоковых систем. Также мы создаем простой клиент TCP с использованием TPI —
15.12 Программные интерфейсы RPC и XDR
15.12 Программные интерфейсы RPC и XDR Приложения клиент/сервер для RPC строятся на основе библиотеки подпрограмм для создания, отправки и получения сообщений RPC. Другие программы библиотеки служат для преобразования между локальным представлением данных для параметров
ГЛАВА 11. ПРОГРАММНЫЕ ПРОЕКТЫ НА ПРОЛОГЕ
ГЛАВА 11. ПРОГРАММНЫЕ ПРОЕКТЫ НА ПРОЛОГЕ В этой главе рассматривается перечень программных проектов, которые вы могли бы попытаться осуществить для развития навыков программирования на Прологе. Некоторые из этих проектов довольно просты, зато другие вполне могут быть
Глава 13. Потоки в Ruby
Глава 13. Потоки в Ruby Он тянет нить своего красноречия искуснее, чем развивает свои доводы. Шекспир, «Бесплодные усилия любви», акт V, сцена 1[15] Потоки еще иногда называют облегченными процессами. Это просто способ обеспечить параллельное выполнение без накладных расходов,
Глава 10 Потоки и файлы
Глава 10 Потоки и файлы 10.0. Введение Потоки (streams) являются одной из самых мощных (и сложных) компонент стандартной библиотеки С++. Их применение при простом, неформатированном вводе-выводе в целом не представляет трудностей, однако ситуация усложняется, если необходимо
Глава 4 Потоки
Глава 4 Потоки Потоки, как и процессы, — это механизм, позволяющий программам выполнять несколько действий одновременно. Потоки работают параллельно. Ядро Linux планирует их работу асинхронно, прерывая время от времени каждый из них, чтобы дать шанс остальным.С
Программные конструкции
Программные конструкции В следующих разделах рассматриваются программные конструкции, распознаваемые в PSQL. Блоки BEGIN ... END PSQL является структурированным языком. После объявления переменных процедурные операторы заключаются в операторные скобки BEGIN и END. В процессе
Программные требования
Программные требования Программные требования к компьютеру при установке на него программы ArchiCAD следующие:? операционная система – Windows XP Pro или Vista Business / Enterprise / Ultimate Edition;? поддержка Java 1.6.0 или более поздняя;? проигрыватель – QuickTime, версия 7 или более поздняя. ПРИМЕЧАНИЕ В
Глава 8 Потоки
Глава 8 Потоки ``bad input char: .Ppm(*=P!..*@Z9A*)5!!!!!"syui!!!"!Mp#V6P?p8`;!4lf amp; сообщение об ошибке (сокращенное) Язык С++ не обеспечивает средств для ввода/вывода. Ему это и не нужно. Такие средства легко и элегантно можно содать с помощью самого языка. Описанная здесь стандартная билиотека
Программные модули
Программные модули В состав задачника входят следующие программные модули: PT4Demo -- позволяет просмотреть в демонстрационном режиме все задания, включенные в задачник; PT4Load -- обеспечивает генерацию программы-шаблона для требуемого учебного задания и ее
Глава 3 Аппаратные и программные средства реализации информационных процессов
Глава 3 Аппаратные и программные средства реализации информационных процессов 3.1. Поколения ЭВМ В соответствии с элементной базой и уровнем развития программных средств выделяют четыре реальных поколения ЭВМ, краткая характеристика которых приведена в таблице