Повышение Asio, io_service обрабатывает только один сокет на ядро - PullRequest
1 голос
/ 28 февраля 2011

Я пишу серверное приложение, используя Boost Asio:

  1. Сервер: Запуск io_service.run () из пула потоков (один поток на ядро), прием соединений и чтение данных из сокетов сделано* асинхронно.
  2. Клиент: каждый клиент подключается и отправляет на сервер тяжелый файл (~ 500 МБ).

Проблема: все клиенты подключены к серверу (количество клиентов> числосерверных ядер);io_service обрабатывает только одно соединение / сокет на поток, в то время как данные из других сокетов не обрабатываются, пока не завершится одно из обработанных соединений.

Я ожидаю, что данные из всех подключенных сокетов обрабатываются пулом потоков io_service в одномвремя

1 Ответ

1 голос
/ 28 февраля 2011

Какое поведение ожидается? Ваш io_service может вызывать обработчики n, только если у вас есть n потоков, вызывающих io_service::run(). Если число незавершенных асинхронных операций превышает n, их обработчики будут ожидать в очереди io_service, пока поток не сможет их вызвать.

...