Я использую 64-разрядную версию Linux Linux scv 3.2.0-39-generic #62-Ubuntu SMP Thu Feb 28 00:28:53 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux и имею два процесса, использующих сокеты, которые работают на одном физическом хосте.
Один процесс (A) отправляет через сокет TCP/IP (это будет локальный сокет, если хост тот же) следующие части данных:
- 276 байт
- 16 байт
Это делается за 0,000023 секунды в процессе A. Данные отправляются, вызывая 2 раза API сокета send.
Другой процесс (B) получает данные через epoll, используя epoll_wait(efd, events, 10, 5). Данные принимаются следующим образом (время берется с clock_gettime(CLOCK_REALTIME, &cur_ts);, важна относительная разница):
- Чтение данных из буфера сокета по адресу 8051.177743 (276)
- Повторный вызов epoll 8051.177763
- Чтение данных из буфера сокета 8051.216250 (16)
задержка процесса получения составляет 0,038507 секунды. В основном, если отправляющий процесс A занимает менее мс, на принимающей стороне epoll для получения данных добавляется дополнительная задержка примерно 0,038 с. .
Ожидается ли это? Что я делаю не так?
Или как исправить ситуацию?
Спасибо