多个网络连接的线程与异步 I/O
Threading vs async I/O for multiple network connections
我有一个 C/C++ 用例,其中同一服务器-客户端对之间需要一对连接。我需要来自连接 #2 的元数据来解析来自连接 #1 的数据。我将在相同的两个端点之间有许多对这样的同时连接。有一台服务器计算机和多台客户端计算机。这些网络连接是使用者。数据由另一个线程生成。
我最初的想法是每个连接有一个线程,但线程会很快用完。然后我想知道异步I/O是否可以在网络方面提供帮助,例如asio
库。但我没有异步网络的经验。
几个问题:
- 如果使用
asio
,我将如何协调我的生产者线程?我可以安全地将线程范式与异步世界混合而不调试地狱吗? - 是否可以在单个线程上使用异步 I/O 进行联网,并将所有服务器和客户端置于同一事件循环下?假设目前只有一个 CPU 内核。
提前感谢!
在深入研究asio
之后,我决定用这个答案来纠正我自己的误解。
我认为asio
的"异步"意味着无线程的非阻塞I/O。但事实证明并非如此。您完全可以使用asio::thread
并将事件循环io_context::run()
分配给线程。
请参阅 asio 教程。
相关文章:
- 如何在C++上启动异步线程
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 多个网络连接的线程与异步 I/O
- STD ::与指定线程的异步类似物
- 异步处理设备的高级线程用法
- 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池中获得返回值?
- 异步记录器线程安全
- 异步是否总是在C++中使用另一个线程/内核/进程
- XAudio2 教程 - 单独的线程和异步读取?
- 使用多线程处理的异步请求
- C++ cv::Mat 返回向量的<rectangle>线程异步
- C++从异步线程更新窗口
- 如何将结构元素传递给异步线程
- 类中的异步线程
- 为什么异步线程中的"Isolate::GerCurrent()"为空?
- 每个任务一个异步线程
- c++中的异步线程安全日志记录(无互斥)
- Boost异步线程
- 同时运行的c++异步线程