【问题标题】:Calling boost::asio::read() in a thread blocks calling thread or process?在线程中调用 boost::asio::read() 会阻塞调用线程或进程?
【发布时间】:2013-05-21 19:42:24
【问题描述】:

我对网络编程很陌生,我正在编写一个应该接受许多 TCP 连接并从它们接收数据的程序。为了使事情并行,代理应该从新线程中的每个套接字读取数据。我决定使用boost::asio 而不是原始的 *nix 套接字来使事情变得更简单。虽然这似乎是一个错误的决定……

我想知道我调用boost::asio::readboost::asio::read_some 是只阻塞它的调用线程还是阻塞进程?是的,我应该编写自己的小测试并自己查看结果,但我现在无法访问我的 Linux 机器。只是在想我明天应该在大学写的代码。

如果它阻塞了进程,那么实现同时接受多个客户端的服务器/客户端架构的正确方法是什么?

注意事项:

  1. 我在设计决策方面遇到困难。任何建议都是合适的。

【问题讨论】:

    标签: c++ sockets boost network-programming boost-asio


    【解决方案1】:

    read 和 read_some 调用都是阻塞的,只会阻塞 Linux 和 Win32 的当前线程(可能还有大多数其他线程,只是没有直接经验)。

    如果您有大量传入连接,您可能希望考虑使用 async_read 来代替,因为您实际上可能使用比连接数更少的线程数来获得更好的性能。 Boost 确实提供了使用线程池处理客户端连接的示例。

    【讨论】:

    • 感谢您的回答。我阅读了文档中的HTTP Server 3 示例。这对我的需求来说太复杂了!我要改用 ZMQ。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多