在线程中调用boost::asio::read()会阻塞调用线程或进程
Calling boost::asio::read() in a thread blocks calling thread or process?
我对网络编程很陌生,我正在编写一个应该接受许多TCP连接并从中接收数据的程序。为了实现并行,代理应该在一个新线程中从每个套接字读取数据。我决定使用boost::asio
而不是原始的*nix套接字,使事情更简单。虽然这似乎是一个错误的决定……
我想知道我是否调用boost::asio::read
或boost::asio::read_some
只阻塞其调用线程或阻塞进程?是的,我应该编写我自己的小测试并自己查看结果,但我现在无法访问我的Linux机器。只是在想我明天在大学应该写的代码。
如果它阻塞了进程,那么实现一个同时接受多个客户端的服务器/客户端架构的正确方法是什么?
指出:
- 我在设计决策上有困难。任何建议都是合适的。
read和read_some调用都是阻塞的,并且只会阻塞Linux和Win32的当前线程(可能还有大多数其他线程,只是没有直接经验)。
如果你有大量的传入连接,你可能会考虑使用async_read,因为使用更少的线程数比连接数实际上可以获得更好的性能。Boost确实提供了使用线程池处理客户端连接的示例。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在另一个线程中调用luaL_error会引发qWarning
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 如何从线程中的不同模块调用函数?
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 是否可以创建一个从不同类调用函数的线程?
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 非静态成员失败的线程调用函数
- 线程调用的函数对对象删除是否安全?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 由并发无序映射查找线程调用的函数是否安全?
- 每个线程 C++ 保护以防止重入函数调用
- localtime() 函数正在调用 ___lll_lock_wait_private(),这会使线程陷入死锁
- 当我在C++中调用 struce 的只读静态成员时,线程是否安全
- 线程 std::调用未知类型,无法专门化函数错误
- 工作线程一直在等待,condition_variable甚至调用了notify_all