Использование сопрограмм boost.asio в macOS запускает множество файловых дескрипторов.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование сопрограмм boost.asio в macOS запускает множество файловых дескрипторов.

Сообщение Anonymous »


У меня есть программа, которая использует async_read с выходом из сокета домена unix.

void readSocket(const std::list::iterator &socket, boost::asio::yield_context выход) { ..... в то время как (1) { ЗаголовокСтруктура HDR; boost::asio::async_read((*socket)->socket, boost::asio::buffer(&hdr, sizeof(hdr)), boost::asio::transfer_all(), выход); ..... } } Похоже, что в экстремальном сценарии, когда система перегружена запросами, поступающими с более высокой вставкой, которую может обработать процесс, я достигаю временного состояния, когда дескриптор открытого файла процесса превысил максимальное значение.

Просмотр lsof показывает, что почти все дескрипторы открытых файлов созданы для двунаправленного канала и один для KQUEUE. По моим наблюдениям, приостановка сопрограммы в async_read реализуется системным вызовом select, который запускает эти три файловых дескриптора.

myProg 83099 root 184u KQUEUE count=1, state=0x8 myProg 83099 root 185 PIPE 0x432799c5a6f5943f 16384 -> 0x28a17a0822a260f7 myProg 83099 root 186 PIPE 0x28a17a0822a260f7 16384 -> 0x432799c5a6f5943f Интересно, верна ли моя теория о том, что системный вызов select запускает эти три файловых дескриптора (я использовал dtrace для мониторинга системных вызовов во время обработки запросов на чтение из сокета), и если да, то как я могу этого избежать? следует ли заменить сопрограмму обычными асинхронными вызовами или использовать синхронное чтение в отдельном потоке?

Спасибо
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение файловых дескрипторов в пространстве ядра без open() [дубликат]
    Anonymous » » в форуме Linux
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Как создать каналы для нестандартных файловых дескрипторов с помощью posix_spawn на C++
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»