【问题标题】:boost asio async_tcp_echo_server exampleboost asio async_tcp_echo_server 示例
【发布时间】:2018-12-03 10:37:21
【问题描述】:

我正在查看来自 boost 站点的示例(用于学习目的):

https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp

在 main 中,我添加了几个线程来运行 io_context。

我实现的行为是我有多个线程在套接字上侦听,每个线程都在等待工作并完成整个工作,所以如果我所有的线程都忙于工作并且另一个客户端向服务器发送一些文本,他会挂起,直到某个线程再次可用。

我希望 1 个线程在套接字上侦听并将所有工作排队,并希望有一个线程池来处理所有工作。

如果我理解正确,我不需要在 main 中创建线程池,而是保持原样,只有主线程接受连接并在服务器中使用线程池创建另一个 io_context 并以某种方式使所有会话都使用它池子,我不知道怎么写。

如果我不将它传递给会话,我仍然不明白每个会话如何知道它使用哪个 io_context。

【问题讨论】:

    标签: c++ multithreading asynchronous boost boost-asio


    【解决方案1】:

    套接字存储一个执行器。该执行者指的是io_context

    在旧的 Boost 版本中,套接字将直接存储对 io_service 的引用。

    【讨论】:

    • 他们在哪里将 io_context(执行程序)传递给套接字?我可以将其更改为另一个 io_context 吗?
    • 您可以在不同的执行者上发布工作。这个想法是使用你的处理程序类型到imply the associated executor。一个典型的例子是使用股线时。设计错综复杂,但非常有效和灵活。我喜欢这个页面,因为它是一个完整的文档,关于它是如何挂在一起的:boost.org/doc/libs/develop/libs/beast/doc/html/beast/using_io/…
    猜你喜欢
    • 2012-10-26
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2017-05-09
    相关资源
    最近更新 更多