在线程中调用boost :: asio :: read()会阻塞调用线程还是进程?

时间:2013-05-21 19:42:24

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

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

我想知道我是否只调用boost::asio::readboost::asio::read_some来阻止其调用线程或阻塞进程?是的我应该自己写一个小测试并看看结果,但我现在无法访问我的Linux盒子。只考虑我明天应该在大学写的代码。

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

备注:

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

1 个答案:

答案 0 :(得分:2)

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

您可能希望查看使用async_read,但是如果您有大量的传入连接,因为您可能使用比连接数更少的线程来实现更好的性能。 Boost确实提供了使用线程池来处理客户端连接的示例。