Эффективность для неблокирующего чтения из одного дескриптора - PullRequest
1 голос
/ 02 апреля 2020

Я разрабатываю C программу, которая отслеживает входящие сообщения из разных источников и делает вещи в соответствии с сообщениями. Моя задача - ждать только одного источника.
И, конечно, ожидание должно быть неблокирующим.

Какой самый эффективный способ сделать это?

  1. неблокирующее чтение ()?

  2. способ выбора / опроса / epoll?

Ну, если это примерно столько же потребляемого процессора / времени, я выберу более простой вариант, читай один. Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Использование non_blocking read () имеет некоторые недостатки:

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

Но если ваши поступающие данные слишком малы, использование select / poll сделает системный вызов (например, read), который будет вызываться много раз.

Для более простого использования select / poll лучше, я думаю.

0 голосов
/ 02 апреля 2020

select с таймаутом на дескриптор файла. Если ваш тайм-аут для выбора бесконечен, используйте вместо этого блокирующее чтение. Если ваш выбор имеет тайм-аут, но ваша программа больше ничего не делает, используйте вместо этого блокирующее чтение.

...