Программа измерения задержки очередей сообщений Posix

Программа измерения задержки очередей сообщений Posix

Пpoгрaммa измерения задержки для очередей сообщений Posix приведена в листинге А.15.

Листинг А. 15. Программа измерения задержки для очереди сообщений Posix

//bench/lat_pxmsg.с

1  #include "unpipc.h"

2  #define NAME1 "lat_pxmsg1"

3  #define NAME2 "lat_pxmsg2"

4  #define MAXMSG 4 /* место для 4096 байт в очереди */

5  #define MSGSIZE 1024

6  void

7  doit(mqd_t mqsend, mqd_t mqrecv)

8  {

9   char buff[MSGSIZE];

10  Mq_send(mqsend, buff, 1.0);

11  if (Mq_receive(mqrecv, buff, MSGSIZE, NULL) != 1)

12   err_quit("mq_receive error");

13 }

14 int

15 main(int argc, char **argv)

16 {

17  int i, nloop;

18  mqd_t mq1, mq2;

19  char buff[MSGSIZE];

20  pid_t childpid;

21  struct mq_attr attr;

22  if (argc != 2)

23   err_quit("usage: lat_pxmsg <#loops>");

24  nloop = atoi(argv[1]);

25  attr.mq_maxmsg = MAXMSG;

26  attr.mq_msgsize = MSGSIZE;

27  mq1 = Mq_open(Px_ipc_name(NAME1), O_RDWR | O_CREAT, FILE_MODE, &attr);

28  mq2 = Mq_open(Px_ipc_name(NAME2), O_RDWR | O_CREAT, FILE_MODE, &attr);

29  if ((childpid = Fork()) == 0) {

30   for(;;) { /* дочерний процесс */

31    if (Mq_receive(mq1, buff, MSGSIZE, NULL) != 1)

32     err_quit("mq_receive error");

33    Mq_send(mq2, buff, 1.0);

34   }

35   exit(0);

36  }

37  /* родительский процесс */

38  doit(mq1, mq2);

39  Start_time();

40  for (i = 0; i < nloop; i++)

41   doit(mq1, mq2);

42  printf("latency: %.3f usec ", Stop_time() / nloop);

43  Kill(childpid, SIGTERM);

44  Mq_close(mq1);

45  Mq_close(mq2);

46  Mq_unlink(Px_ipc_name(NAMED);

47  Mq_unlink(Px_ipc_name (NAME2));

48  exit(0);

49 }

25-28 Создаются две очереди сообщений, каждая из которых используется для передачи данных в одну сторону. Хотя для очередей Posix можно указывать приоритет сообщений, функция mq_receive всегда возвращает сообщение с наивысшим приоритетом, поэтому мы не можем использовать лишь одну очередь для данного приложения.

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

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

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

Получение и пересылка сообщений. Создание ответных сообщений

Из книги Office 2007. Мультимедийный курс автора Мединов Олег

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


ГЛАВА 5 Очереди сообщений Posix

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

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


5.5. Ограничения очередей сообщений

Из книги Разработка ядра Linux автора Лав Роберт

5.5. Ограничения очередей сообщений Мы уже сталкивались с двумя ограничениями, устанавливаемыми для любой очереди в момент ее создания:? mq_maxmsg — максимальное количество сообщений в очереди;? mq_msgsize — максимальный размер сообщения.Не существует каких-либо ограничений на


Пример: очереди сообщений Posix и функция select

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

Пример: очереди сообщений Posix и функция select Дескриптор очереди сообщений (переменная типа mqd_t) не является «обычным» дескриптором и не может использоваться с функциями select и poll (глава 6 [24]). Тем не менее их можно использовать вместе с каналом и функцией mq_notify. (Аналогичный


Результаты измерения полосы пропускания сообщений

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

Результаты измерения полосы пропускания сообщений В табл. А.2 приведены результаты измерений на компьютере Sparc под управлением Solaris 2.6, а на рис. А.1 — график этих результатов.Как мы и предполагали, полоса пропускания увеличивается с размером сообщения. Поскольку во многих


Результаты измерения задержки

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

Результаты измерения задержки В табл. А.1 приведены значения задержки в Solaris 2.6 и Digital Unix 4.0B.Таблица А.1. Задержка при передаче сообщения размером 1 байт (в микросекундах)  Канал Очередь сообщений Posix Очередь сообщений System V Двери Sun RPC TCP Sun RPC UDP Сокет TCP Сокет UDP Доменный


Измерение полосы пропускания очереди сообщений Posix

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

Измерение полосы пропускания очереди сообщений Posix В листинге А.5 приведена функция main программы, измеряющей полосу пропускания очереди сообщений Posix. Листинг А.6 содержит функции reader и writer. Эта программа устроена аналогично предыдущей, измерявшей полосу пропускания


Программа измерения полосы пропускания очереди System V

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

Программа измерения полосы пропускания очереди System V В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 —текст функций reader и writer.Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System


Программа измерения полосы пропускания дверей

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

Программа измерения полосы пропускания дверей Программа измерения полосы пропускания интерфейса дверей сложнее, чем предыдущие, поскольку нам нужно вызвать fork перед созданием двери. Родительский процесс создает дверь и с помощью канала оповещает дочерний процесс о


А.4. Измерение задержки передачи сообщений: программы

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

А.4. Измерение задержки передачи сообщений: программы Приведем текст трех программ, измеряющих задержку при передаче сообщений по каналам, очередям Posix и очередям System V. Данные о производительности, полученные с их помощью, приведены в табл.


Программа измерения задержки канала

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

Программа измерения задержки канала Программа для измерения задержки канала приведена в листинге А.14.Листинг А.14. Программа измерения задержки канала//bench/lat_pipe.c1  #include "unpipc.h"2  void3  doit(int readfd, int writefd)4  {5   char c;6   Write(writefd, &c, 1);7   if (Read(readfd, &c, 1) != 1)8    err_quit("read error");9 


Измерение задержки очередей сообщений System V

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

Измерение задержки очередей сообщений System V В листинге А.16 приведен текст программы измерения времени задержки для очередей сообщений System V.Листинг А.16. Программа измерения времени задержки для очередей сообщений System V//bench/lat_svmsg.c1  #include "unpipc.h"2  struct msgbuf p2child = { 1, { 0 } }; /* type = 1


Программа измерения задержки интерфейса дверей

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

Программа измерения задержки интерфейса дверей Пpoгрaммa измерения задержки для интерфейса дверей дана в листинге А.17. Дочерний процесс создает дверь и связывает с ней функцию server. Родительский процесс открывает дверь и вызывает door_call в цикле. В качестве аргумента


Программа измерения времени задержки Sun RPC

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

Программа измерения времени задержки Sun RPC Для измерения времени задержки Sun RPC мы напишем две программы: клиент и сервер, аналогично измерению полосы пропускания. Мы используем старый файл спецификации RPC, но на этот раз клиент вызывает нулевую процедуру сервера.


Использование очередей отложенных действий

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

Использование очередей отложенных действий Использовать очереди действий просто. Сначала мы рассмотрим рабочие потоки, используемые по умолчанию, — events, а затем опишем создание новых типов рабочих потоков.Создание отложенных действийПервый этап — это создание самого