Читаем UNIX Network Programming. Volume 2 Second Edition. Interprocess Communications полностью

Размер сообщенияКаналОчередь сообщений PosixОчередь сообщений System VДвериSun RPC TCPSun RPC UDPСокет TCPДоменный сокет
10246,33,74,96,30,50,5
20488,75,36,310,00,91,0
40969,88,46,612,61,62,8
819212,710,25,814,42,42,8
1638413,111,66,116,83,23,4
3276813,213,411,43,54,3
6553613,714,412,23,713,211,3


Рис. А.2. Полоса пропускания для различных средств передачи сообщений (Digital Unix 4.0B)


Таблица А.З. Полоса пропускания для различных типов сообщения в Digital Unix 4.0B (Мбайт/с)

Размер сообщенияКаналОчередь сообщений PosixОчередь сообщений System VSun RPC TCPSun RPC UDPСокет TCPДоменный сокет
10249,91,812,70,60,6
204815,23,515,00,81,0
409617,15,921,11,31,8
819216,58,617,11,82,5
1638417,311,717,32,3
3276815,914,02,6
6553614,29,42,84,618,0

Результаты синхронизации потоков

В табл. А.4 приведены значения времени, нужного одному или нескольким потокам для увеличения счетчика в разделяемой памяти с использованием различных средств синхронизации в Solaris 2.6, а на рис. А.3 показан график этих значений. Каждый поток увеличивает значение счетчика 1000000 раз, а количество потоков меняется от 1 до 5. В табл. А.5 приведены эти же значения для Digital Unix 4.0В, а на рис. А.4 — график этих значений. 

Рис. А.З. Время увеличения счетчика в разделяемой памяти (Solaris 2.6)


Мы увеличиваем количество потоков, чтобы проверить правильность кода. Кроме того, при добавлении потоков время работы программы может начать расти нелинейно. Блокировка fcntl может использоваться только одним потоком, поскольку эта форма синхронизации предназначена только для использования между несколькими процессами, а не потоками одного процесса. 

В Digital Unix 4.0B значения для семафоров Posix оказываются непомерно большими, если работает более одного потока, что указывает на наличие какой-то аномалии. На графике мы эти значения не приводим.

ПРИМЕЧАНИЕ

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

Рис.А.4. Время увеличения счетчика в разделяемой памяти (Digital Unix 4.0B)


Таблица А.4. Время увеличения счетчика в разделяемой памяти для Solaris 2.6 (в секундах)

Кол-во потоковВзаимное исключение PosixБлокировка чтения-записиСемафор Posix в памятиИменованный семафор PosixСемафор System VСемафор System V с UNDOБлокировка записей fcntl
10,72,04,515,416,321,189,4
21,55,49,031,131,537,5
32,27,514,446,548,357,7
42,913,718,262,565,875,8
53,719,722,876,881,890,0


Таблица А.5. Время увеличения счетчика в разделяемой памяти в Digital Unix 4.0B (в секундах) 

Кол-во потоковВзаимное исключение PosixБлокировка чтения-записиСемафор Posix в памятиИменованный семафор PosixСемафор System VСемафор System V с UNDOБлокировка записей fcntl
12,912,913,214,226,646,696,4
211,440,8742,5771,654,993,9
328,473,21080,51074,584,5141,9
449,395,01534,11502,2109,9188,4
567,3126,31923,31764,1137,3233,6

Результаты синхронизации процессов

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже