АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Очереди сообщений

Прочитайте:
  1. В теме 16 сообщений
  2. В теме 17 сообщений
  3. В теме 6 сообщений
  4. В теме 7 сообщений
  5. В теме 9 сообщений
  6. Из сообщений на форумах
  7. Темы для докладов и сообщений
  8. Темы для докладов и сообщений
  9. Темы для докладов и сообщений

Очереди сообщений (Queue) являются более сложным методом связи между взаимодействующими процессами по сравнению с каналами. С помощью очере­дей также можно из одной или нескольких задач независимым образом посы­лать сообщения некоторой задаче-приемнику. При этом только процесс-прием­ник может читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь свои сообщения. Таким образом, очередь рабо­тает только в одном направлении. Если же необходима двухсторонняя связь, то можно создать две очереди.

Работа с очередями сообщений имеет много отличий от работы с конвейерами. Во-первых, очереди сообщений предоставляют возможность использовать не­сколько дисциплин обработки сообщений:

Q FIFO — сообщение, записанное первым, будет первым и прочитано; Q LIFO — сообщение, записанное последним, будет прочитано первым; О приоритетный — сообщения читаются с учетом их приоритетов; Q произвольный доступ, то есть можно читать любое сообщение, тогда как ка­нал обеспечивает только дисциплину FIFO.


Во-вторых, если при чтении сообщения из канала (конвейера) оно удаляется из него, то при чтении сообщения из очереди этого не происходит, и сообщение при желании может быть прочитано несколько раз.

В третьих, в очередях присутствуют не непосредственно сами сообщения, а толь­ко их адреса в памяти и размер. Эта информация размещается системой в сег­менте памяти, доступном для всех задач, общающихся с помощью данной оче­реди.

Каждый процесс, использующий очередь, должен предварительно получить раз­решение на использование общего сегмента памяти с помощью системных за­просов API, ибо очередь — это системный механизм и для работы с ним требу­ются системные ресурсы и, соответственно, обращение к самой ОС. Во время чтения из очереди задача-приемник пользуется следующей информацией:

Q идентификатор процесса (PID — process ID), который передал сообщение;

Q адрес и длина переданного сообщения;

Q ждать или нет, если очередь пуста;

О приоритет переданного сообщения;

Q номер освобождаемого семафора, когда сообщение передается в очередь.

Наконец, приведем перечень основных функций, управляющих работой очереди (без подробного описания передаваемых параметров), поскольку в различных ОС обращения к этим функциям могут существенно различаться:

Q CreateQueue — создание новой очереди;

О OpenQueue — открытие существующей очереди;

Q ReadQueue — чтение и удаление сообщения из очереди;

Q PeekQueue — чтение сообщения без его последующего удаления из оче­реди;

Q WriteQueue — добавление сообщения в очередь;

Q CloseQueue — завершение использования очереди;

Q PurgeQueue — удаление из очереди всех сообщений;

Q QueryQueue — определение числа элементов в очереди.


Дата добавления: 2015-01-18 | Просмотры: 572 | Нарушение авторских прав



1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |



При использовании материала ссылка на сайт medlec.org обязательна! (0.003 сек.)