多个网络连接的线程与异步 I/O

Threading vs async I/O for multiple network connections

本文关键字:异步 线程 网络 连接      更新时间:2023-10-16

我有一个 C/C++ 用例,其中同一服务器-客户端对之间需要一对连接。我需要来自连接 #2 的元数据来解析来自连接 #1 的数据。我将在相同的两个端点之间有许多对这样的同时连接。有一台服务器计算机和多台客户端计算机。这些网络连接是使用者。数据由另一个线程生成。

我最初的想法是每个连接有一个线程,但线程会很快用完。然后我想知道异步I/O是否可以在网络方面提供帮助,例如asio库。但我没有异步网络的经验。

几个问题:

  1. 如果使用asio,我将如何协调我的生产者线程?我可以安全地将线程范式与异步世界混合而不调试地狱吗?
  2. 是否可以在单个线程上使用异步 I/O 进行联网,并将所有服务器和客户端置于同一事件循环下?假设目前只有一个 CPU 内核

提前感谢!

在深入研究asio之后,我决定用这个答案来纠正我自己的误解。

我认为asio的"异步"意味着无线程的非阻塞I/O。但事实证明并非如此。您完全可以使用asio::thread并将事件循环io_context::run()分配给线程。

请参阅 asio 教程。