Статус
нашего
сайта:
ICQ Secrets Center is Online  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


Таненбаум Э.- Архитектура компьютера. стр.385

В каких случаях могут понадобиться программные потоки? Рассмотрим веб-сервер. Такой сервер может хранить в основной памяти кэш часто используемых веб-страниц. Если нужная страница находится в кэш-памяти, то она выдается немедленно. Если нет, то она вызывается с диска. К сожалению, на это требуется довольно длительное время (обычно 20 миллисекунд), на это время

процесс блокируется и не может обслуживать вновь поступающие запросы, даже если запрашиваемые веб-страницы находятся в кэш-памяти.

Для решения проблемы можно создать несколько программных потоков в одном процессе, которые разделяют общую кэш-память веб-страниц. Если один из программных потоков блокируется, новые запросы могут обрабатываться другими программными потоками. Предотвратить блокировку процессов можно и без использования программных потоков. Для этого потребуется несколько процессов, но тогда придется продублировать кэш, а это несколько расточительно, поскольку объем памяти ограничен.

Стандарт системы UNIX на программные потоки называется pthreads и определяется в POSIX (Р1003.1С). Он описывает вызовы для управления программными потоками и их синхронизации. В стандарте ничего не сказано о том, должно ли управлять программными потоками ядро, или они должны функционировать только в пользовательском пространстве. Наиболее распространенные функции для работы с программными потоками приведены в табл. 6.9.

Таблица 6.9. Основные функции для работы с программными потоками, определенные в стандарте РОЭ1Х

Функция

Описание

pthread_create

Создание нового программного потока в адресном пространстве

 

вызывающей процедуры

pthread_exit

Завершение программного потока

pthreadjoin

Ожидание завершения программного потока

pthread_mutex_init

Создание нового мьютекса

pthread_mutex_destroy

Удаление мьютекса

pth read_m utexj oc k

Блокирование мьютекса

pthread_mutex_unlock

Разблокирование мьютекса

pthread_cond_init

Создание условной переменной

pthread_cond_destroy

Удаление условной переменной

pthread_cond_wait

Ждет условную переменную

pthread_cond_signal

Разблокирование одного из программных потоков, ожидающего

 

условной переменной

Давайте рассмотрим эти вызовы. Первый вызов, рт.пгеас1_сгеа1е, создает новый программный поток. После выполнения этой процедуры в адресном пространстве появляется на один программный поток больше. Программный поток, который выполнил свою работу, вызывает функцию рт.Г1геаа_ехИ;. Если потоку нужно подождать, пока другой поток окончит работу, он вызывает функцию р1г1геа<зоо1П. Если этот другой программный поток уже закончил свою работу, вызов р1;г1геас1_зо"т немедленно завершается. В противном случае он блокируется.

Программные потоки можно синхронизировать с помощью специальных объектов, которые называются мьютексами (пигЬехез). Обычно мьютекс управляет каким-либо ресурсом (например, буфером, разделенным между двумя программными потоками). Для того чтобы в конкретный момент времени только один поток мог получать доступ к общему ресурсу, потоки должны блокировать мьютекс перед использованием ресурса и разблокировать его после завершения


⇐ Предыдущая страница| |Следующая страница ⇒

.