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

Calling boost::asio::read() in a thread blocks calling thread or process?

本文关键字:调用 线程 进程 read boost asio      更新时间:2023-10-16

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

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

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

指出:

    我在设计决策上有困难。任何建议都是合适的。

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

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