boost: asio HTTP server пример 3, количество потоков (сборка Windows) - PullRequest
1 голос
/ 09 декабря 2010

В примере 3 сервера HTTP (boost 2.44) служба ввода-вывода создается без подсказки счетчика потоков.В Windows обычно передают количество потоков в CreateIoCompletionPort ().boost: asio имеет ctor службы ввода-вывода, который принимает число потоков, но этот ctor не используется в этом примере.И количество потоков известно.

Мой вопрос: есть ли причина для создания службы ввода-вывода без счетчика потоков?Boost: asio предполагает, что никто не будет создавать больше потоков, чем по одному на ядро?Обратите внимание, что если число потоков, переданное CreateIoCompletionPort (), равно нулю, система разрешит один поток на ядро ​​одновременно работающих потоков.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2010

Когда concurrency_hint не указан для boost:asio::io_service() конструктора. По умолчанию бесконечен или неограничен , что никогда не является лучшей практикой. Но разработчик, вероятно, счел этот concurrency_hint на основе Windows ненужным, поэтому по умолчанию согласовал все платформы (без ограничений). Вероятно, это будет соответствовать тому, как другие ОС интерпретируют это значение.

Так как сама Windows не создает потоков из всего этого фиаско, это не должно волновать. concurrency_hint следует переименовать max_allowed_concurrency_on_Windows

0 голосов
/ 09 декабря 2010

Когда вы вызываете конструктор без параметров в io_service, вызов CreateIoCompletionPort завершается с использованием счетчика потоков 0xffffffff в коде здесь:

void win_iocp_io_service::init(size_t concurrency_hint)
{
  iocp_.handle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0,
      static_cast<DWORD>((std::min<size_t>)(concurrency_hint, DWORD(~0))));
  if (!iocp_.handle)
  {
    DWORD last_error = ::GetLastError();
    boost::system::error_code ec(last_error,
        boost::asio::error::get_system_category());
    boost::asio::detail::throw_error(ec, "iocp");
  }
}

Не уверен, как Windows интерпретирует этоно вызов работает нормально, поэтому я предполагаю, что это то же самое, что и использование 0. Я предполагаю, что ОС знает лучше?

...