Иерархический принцип обмена (send-иерархия)

Иерархический принцип обмена (send-иерархия)

В обмене сообщениями есть одна вещь, которая, возможно, не является очевидной — это необходимость следовать строгой иерархии обмена. Означает это то, что два потока никогда не должны посылать сообщения друг другу; наоборот, они должны быть организованы так, что каждый поток занимал свой «уровень иерархии», и все потоки данного уровня должны посылать сообщения только потокам более низкого уровня, а не своего или высшего. Проблема с наличием двух потоков, которые посылают сообщения друг другу, заключается в том, что в конечном счете вы столкнетесь с проблемой взаимной блокировки (deadlock), когда оба потока ожидают друг от друга ответ на соответствующие сообщения. Поскольку эти потоки блокированы, то они никогда не будут поставлены на выполнение, а значит, не смогут дать друг другу ответ, и вы в результате получите два (а то и более!) зависших потока.

Способ назначения потокам уровней иерархии заключается в том, чтобы разместить наиболее удаленную клиентуру на самом верхнем уровне и работать оттуда. Например, если у вас есть графический интерфейс пользователя, который использует некоторый сервер баз данных, который, в свою очередь, использует файловую систему, а файловая система использует блок-ориентированный драйвер файловой системы, то у вас получается естественная иерархия процессов.

Передачи (sends) при обмене сообщениями будут направлены от клиента (графического интерфейса пользователя) вниз к серверам нижнего уровня; ответы на сообщения (replies) будут иметь встречное направление.

При том, что это работает в большинстве случаев, вы можете столкнуться и с ситуацией, когда вам придется нарушить иерархию обмена. Это никогда не следует выполнять простым нарушением иерархии, направляя сообщения «против течения» — для этого существует функция MsgDeliverEvent(), о которой речь несколько позже.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.3. Иерархия понятий

Из книги Феномен науки. Кибернетический подход к эволюции автора Турчин Валентин Фёдорович


4.2.1. Иерархия класса геометрии

Из книги Самоучитель работы на Macintosh автора Скрылина Софья

4.2.1. Иерархия класса геометрии Классы геометрии определяют свою иерархию следующим образом:Geometry (non-instantiable)Point (instantiable)Curve (non-instantiable)LineString (instantiable)LineLinearRingSurface (non-instantiable)Polygon (instantiable)GeometryCollection (instantiable)MultiPoint (instantiable)MultiCurve (non-instantiable)MultiLineString (instantiable)MultiSurface (non-instantiable)MultiPolygon


18.4 Иерархия меню Gopher

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

18.4 Иерархия меню Gopher Меню gopher организовано в виде иерархического дерева. Пункт меню может указывать на следующее меню, которое, возможно, размещается на совершенно другом сайте. Листьями дерева меню являются документы и приложения.Далее будет видно, что меню gopher реально


Иерархия VBA

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

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


1.7. Иерархия файлов

Из книги C++ для начинающих автора Липпман Стенли

1.7. Иерархия файлов Вся информация, хранящаяся на жестком диске вашего Мака, упорядочена иерархическим способом. Иерархическая организация является многоуровневой, при которой каждый новый уровень следует из предыдущего от высшего к низшему. На самом первом (верхнем)


9.2.1. Иерархия процессов: ps и pstree

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

9.2.1. Иерархия процессов: ps и pstree О том, что команда ps позволяет просмотреть сведения обо всех процессах, протекающих в системе в данный момент, вы уже знаете (п.3.2). С ключом -f эта команда выводит как PID самого процесса, так и PPID его родителя, то есть по ее выводу можно


23.4.8. Иерархия виджитов

Из книги UNIX — универсальная среда программирования автора Пайк Роб

23.4.8. Иерархия виджитов GtkObject+GtkWidget| +GtkMisc| | +GtkLabel| | | +GtkAccelLabel| | | `GtkTipsQuery| | +GtkArrow| | +GtkImage| | `GtkPixmap| +GtkContainer| | +GtkBin| | | +GtkAlignment| | | +GtkFrame| | | | `GtkAspectFrame| | | +GtkButton| | | | +GtkToggleButton| | | | | `GtkCheckButton| | | | | `GtkRadioButton| | | | `GtkOptionMenu| | | +GtkItem| | | | +GtkMenuItem| | | | | +GtkCheckMenuItem| | | | | | `GtkRadioMenuItem| | | | | `GtkTearoffMenuItem| | | | +GtkListItem|


Иерархия компонентов в IBX

Из книги автора

Иерархия компонентов в IBX Поскольку вы работаете с Delphi (или с C++ Builder), то предполагается, что вы знакомы с объектно-ориентированным программированием Таким образом, разобравшись, как именно и от кого унаследованы различные компоненты IBX, можно будет более полно


Иерархия объектов в InterBase

Из книги автора

Иерархия объектов в InterBase Чтбы более четко представлять себе, что такое объекты базы данных, мы попробуем построить иерархию объектов базы данных, исходя из принципа "кто кого содержит". Первыми нужно включить в нашу иерархию физические страницы файлов базы данных, как


17.4.3. Альтернативная иерархия классов

Из книги автора

17.4.3. Альтернативная иерархия классов Хотя наша иерархия классов Query представляется вполне приемлемой, она вовсе не является единственно возможной. Например, AndQuery и OrQuery связаны с бинарной операцией, поэтому они в какой-то степени дублируют друг друга. Можно вынести все


14.3. Функции recv и send

Из книги автора

14.3. Функции recv и send Эти две функции аналогичны стандартным функциям read и write, но для них требуется дополнительный аргумент.#include <sys/socket.h>ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);Обе функции возвращают: количество прочитанных или


2.6 Иерархия каталогов

Из книги автора

2.6 Иерархия каталогов В первой главе рассмотрение иерархии файловой системы, начиная с каталога /usr/you, носило несколько неформальный характер. Теперь мы хотим изучить ее последовательно, начиная от корня дерева.Корневой каталог называется /:$ ls /binbootdevetclibtmpunixusr$Программа