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

时间:2019-08-30 03:38:47

标签: c++ multithreading sockets asynchronous networking

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

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

几个问题:

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

谢谢!

1 个答案:

答案 0 :(得分:0)

深入研究asio之后,我决定用此答案解决自己的误解。

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

请参阅the asio tutorial