Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.385В каких случаях могут понадобиться программные потоки? Рассмотрим веб-сервер. Такой сервер может хранить в основной памяти кэш часто используемых веб-страниц. Если нужная страница находится в кэш-памяти, то она выдается немедленно. Если нет, то она вызывается с диска. К сожалению, на это требуется довольно длительное время (обычно 20 миллисекунд), на это время процесс блокируется и не может обслуживать вновь поступающие запросы, даже если запрашиваемые веб-страницы находятся в кэш-памяти. Для решения проблемы можно создать несколько программных потоков в одном процессе, которые разделяют общую кэш-память веб-страниц. Если один из программных потоков блокируется, новые запросы могут обрабатываться другими программными потоками. Предотвратить блокировку процессов можно и без использования программных потоков. Для этого потребуется несколько процессов, но тогда придется продублировать кэш, а это несколько расточительно, поскольку объем памяти ограничен. Стандарт системы UNIX на программные потоки называется pthreads и определяется в POSIX (Р1003.1С). Он описывает вызовы для управления программными потоками и их синхронизации. В стандарте ничего не сказано о том, должно ли управлять программными потоками ядро, или они должны функционировать только в пользовательском пространстве. Наиболее распространенные функции для работы с программными потоками приведены в табл. 6.9. Таблица 6.9. Основные функции для работы с программными потоками, определенные в стандарте РОЭ1Х
Давайте рассмотрим эти вызовы. Первый вызов, рт.пгеас1_сгеа1е, создает новый программный поток. После выполнения этой процедуры в адресном пространстве появляется на один программный поток больше. Программный поток, который выполнил свою работу, вызывает функцию рт.Г1геаа_ехИ;. Если потоку нужно подождать, пока другой поток окончит работу, он вызывает функцию р1г1геа<зоо1П. Если этот другой программный поток уже закончил свою работу, вызов р1;г1геас1_зо"т немедленно завершается. В противном случае он блокируется. Программные потоки можно синхронизировать с помощью специальных объектов, которые называются мьютексами (пигЬехез). Обычно мьютекс управляет каким-либо ресурсом (например, буфером, разделенным между двумя программными потоками). Для того чтобы в конкретный момент времени только один поток мог получать доступ к общему ресурсу, потоки должны блокировать мьютекс перед использованием ресурса и разблокировать его после завершения |