Глава 26.
Потоки исполнения
В этой главе вы познакомитесь с
потоками исполнения
, или просто
потоки
(threads)
1
.
Мы поговорим о том, почему в Microsoft Windows появилась концепция потоков,
о тенденциях развития процессоров, о взаимоотношениях потоков общеязыковой
исполняющей среды (CLR-потоков) и
Windows-потоков, о дополнительных за-
тратах ресурсов при использовании потоков, о планировании исполнения потоков
в Windows, о классах .NET Framework, предоставляющих доступ к свойствам по-
токов, и о многом другом.
В главах пятой части книги объясняется, каким образом Windows взаимодей-
ствует с CLR для формирования архитектуры потоков. Надеюсь, после прочтения
этих глав вы получите достаточно информации для эффективного применения по-
токов и создания надежных, расширяемых приложений и компонентов,
оперативно
реагирующих на действия пользователя.
для чего Windows поддерживает потоки?
На заре компьютерной эры операционные системы не поддерживали концепцию
потоков. Точнее, существовал всего один поток исполнения, обслуживающий как код
операционной системы, так и код приложений. В результате задание, выполнение
которого требовало времени, препятствовало выполнению других заданий. К при-
меру, во времена 16-разрядной системы Windows обычной была ситуация, когда
распечатывающее документ приложение приостанавливало работу всей машины.
Операционная система и остальные приложения просто «зависали». А если вдруг
в
приложении возникала ошибка, которая приводила к бесконечному циклу, она
вообще порождала массу проблем.
Пользователю оставалось только перезагрузить компьютер, нажав кнопку
Reset
или выключатель питания. Разумеется, пользователи ненавидели такие ситуации
(и продолжают ненавидеть до сих пор), потому что все запущенные приложения
при этом аварийно завершались, а обрабатываемые данные стирались из памяти.
В Microsoft понимали, что 16-разрядная платформа Windows недостаточно хороша,
чтобы удержать компанию на плаву в ходе дальнейшего развития компьютерной
индустрии, поэтому было решено создать новую операционную систему,
удовлет-
воряющую потребности как корпораций, так и отдельных пользователей. Она
должна была быть устойчивой, надежной, расширяемой, безопасной и избавленной
1
Не путать с потоками ввода-вывода (streams). —
Примеч
.
ред
.
725
Ресурсоемкость.потоков
от большинства недостатков своей предшественницы. Ядро этой операционной
системы впервые было выпущено в составе Windows NT. С годами это ядро пре-
терпело множество обновлений и приобрело дополнительные возможности. По-
следняя версия ядра поставляется с последними версиями
операционных систем
Windows для клиента и сервера.
При разработке нового ядра операционной системы было решено запускать
каждый экземпляр приложения в отдельном
процессе
(process). Процессом на-
зывается набор ресурсов, используемый отдельным экземпляром приложения.
Каждому процессу выделяется виртуальное адресное пространство; это гаранти-
рует, что код и данные одного процесса будут недоступны для другого. Это делает
приложения отказоустойчивыми, поскольку при таком
подходе один процесс не
может повредить код или данные другого. Код и данные ядра также недоступны
для процессов; а значит, код приложений не в состоянии повредить код или данные
операционной системы. Это упрощает работу конечных пользователей. Система
становится также более безопасной, потому что код произвольного приложения
не имеет доступа к именам пользователей, паролям, информации кредитной карты
или иным конфиденциальным данным, с которыми
работают другие приложения
или сама операционная система.
А что с центральным процессором? Что если приложение войдет в бесконечный
цикл? Если процессор всего один, приложение будет выполнять этот бесконечный
цикл и не сможет уделять внимание другим операциям. Несмотря на очевидные
преимущества (неповрежденные данные и более высокая степень безопасности),
система, как и ее предшественницы, не сможет реагировать на действия конечного
пользователя. Для решения этой проблемы и были придуманы потоки. Именно
поток
стал той концепцией, которая предназначена
для виртуализации процес-
сора в Windows. Каждому Windows-процессу выделяется собственный поток ис-
полнения (который работает как виртуальный процессор). Если код приложения
войдет в бесконечный цикл, то блокируется только связанный с этим кодом про-
цесс, а остальные процессы (исполняющиеся в собственных потоках) продолжают
функционировать!
Do'stlaringiz bilan baham: