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

C++ 在unix套接字上调用async_connect有意义吗?,c++,boost-asio,C++,Boost Asio,我正在使用asio构建一个网络库,它可以通过TCP或unix套接字连接到远程系统。我使用的是asio::generic::stream_protocol::socket,它既有connect方法,也有async_connect方法。作为客户端连接到unix套接字时使用async\u connect有意义吗?定义“有意义”。然而,这两种方法都能起作用,对风格、架构和性能的影响各不相同 数据输入/输出(尤其是通过网络进行的数据输入/输出)具有很高的延迟,即延迟,这导致了整个模糊异步编程风格,boos

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

定义“有意义”。然而,这两种方法都能起作用,对风格、架构和性能的影响各不相同

数据输入/输出(尤其是通过网络进行的数据输入/输出)具有很高的延迟,即延迟,这导致了整个模糊异步编程风格,boost asio甚至从中得名

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


但是,既然您想两者兼而有之,我建议您只使用
async\u connect
,因为对于TCP情况,您必须以“异步”方式组织整个程序,并且对于unix套接字情况,它没有任何缺点(可能比阻塞情况更快或吞吐量更高)。包括我在内的许多人认为,不在特殊情况下制造不必要的分支是有道理的

connect
async\u connect
是不可互换的:使用异步库意味着您需要重新构造项目代码的其余部分,以使用异步模式,这可能是一项重大任务。TCP和Unix套接字都受益于使用异步编程模式,并且Unix套接字操作本身并不同步,即使它们确实发生在同一台本地计算机上。@Dai但是套接字已经存在,那么使用async_connect我们能赢得什么呢?@Dai在asio中的UNIX域套接字上使用
boost::asio::connect
绝对没有问题,不管是否使用异步操作完成IO的其余部分。