在 unix 套接字上调用async_connect有意义吗?



我正在使用asio构建一个可以通过TCP或unix套接字连接到远程系统的网络库。我使用asio::generic::stream_protocol::socket它既有connect方法,也有async_connect方法。作为客户端连接到 unix 套接字时,使用async_connect是否有意义?

定义"有意义"。这两种方式都有效,但对风格、架构和性能的影响不同。

数据输入/输出,特别是通过网络具有高延迟,即延迟,并导致整个模糊异步编程风格,boost asio甚至得名于此。

因此,在TCP情况下使用阻塞connect将是一个非常糟糕的选择,因为整个线程要等待几毫秒,直到发生某些事情并且无法执行其他任何操作,而在IPC的情况下也可以,即unix套接字。

但是由于你想要两者兼而有之,我建议简单地使用async_connect,因为无论如何你都必须以 TCP 情况的"异步"风格组织整个程序,并且它对 unix 套接字情况没有任何缺点(也可能比阻塞更快或具有更高的吞吐量)。并且不使不必要的分支成为特殊情况,许多人认为包括我在内的是有道理的。

最新更新