asio::async_connect 对比 asio::connect。 asio::connect 是非阻塞同步吗?
asio::async_connect vs asio::connect. Is asio::connect a non-blocking sync?
我使用的是 asio 1.18.1 独立版本(没有提升),我想知道 asio::connect
和 asio::async_connect
之间的区别。
我可以告诉自己为什么我的服务器需要异步,因为异步的意义在于能够同时处理大量不同连接上的大量数据。
但是对于客户端来说,我真的只需要一个非阻塞线程,而只有一个线程的async不是没用吗? asio::connect
是非阻塞同步吗,因为那是我真正需要的?如果是阻塞同步,那么我宁愿选择asio::async_connect
。关于 asio::async_read
和 asio::async_write
的相同问题。
I'm using the asio 1.18.1 standalone version (no boost) and I wonder about the difference between asio::connect and asio::async_connect.
asio::connect
尝试在调用点连接套接字并将阻塞直到建立连接。换句话说,如果解析一个 DNS 地址需要 20 秒,它将在整个持续时间内阻塞。
asio::async_connect
只会将连接请求排队,在您调用 io_context.run()
(或其他函数,例如 run_once()
等)之前不会实际执行任何操作。
I can tell myself why I need async for my server, because the point of async is being able to deal with a lot of data on a lot of different connections at the same time.
我既不能证实也不能否认。
But when it comes to the client, I really need just one non-blocking thread and isn't async for just one thread useless?
不一定。如果你想在同一个线程上做其他事情,例如显示连接进度,执行周期性计时器或 运行 交互式 GUI 等。如果你调用 asio::connect
,你的 GUI 将冻结直到函数 returns.您可以选择在与 GUI 不同的线程上调用 asio::connect
,但是您需要担心线程同步、锁、互斥等问题。
Is asio::connect a non-blocking sync, because that's what I really need?
这个问题我不是很懂,但是asio::connect
卡住了
If it's a blocking sync, then I would rather choose the asio::async_connect. Same question about asio::async_read and asio::async_write.
asio::connect
、asio::read
和asio::write
都是阻塞的。换句话说,它们将在调用点执行并阻塞直到完成。
asio::async_connect
、asio::async_read
和 asio::async_write
是它们的异步(非阻塞)对应物。当您调用其中任何一个时,它们将排队等待执行,并在您调用 io_context.run()
后执行。 (我简化了一点,但这是基本概念。)
我使用的是 asio 1.18.1 独立版本(没有提升),我想知道 asio::connect
和 asio::async_connect
之间的区别。
我可以告诉自己为什么我的服务器需要异步,因为异步的意义在于能够同时处理大量不同连接上的大量数据。
但是对于客户端来说,我真的只需要一个非阻塞线程,而只有一个线程的async不是没用吗? asio::connect
是非阻塞同步吗,因为那是我真正需要的?如果是阻塞同步,那么我宁愿选择asio::async_connect
。关于 asio::async_read
和 asio::async_write
的相同问题。
I'm using the asio 1.18.1 standalone version (no boost) and I wonder about the difference between asio::connect and asio::async_connect.
asio::connect
尝试在调用点连接套接字并将阻塞直到建立连接。换句话说,如果解析一个 DNS 地址需要 20 秒,它将在整个持续时间内阻塞。
asio::async_connect
只会将连接请求排队,在您调用 io_context.run()
(或其他函数,例如 run_once()
等)之前不会实际执行任何操作。
I can tell myself why I need async for my server, because the point of async is being able to deal with a lot of data on a lot of different connections at the same time.
我既不能证实也不能否认。
But when it comes to the client, I really need just one non-blocking thread and isn't async for just one thread useless?
不一定。如果你想在同一个线程上做其他事情,例如显示连接进度,执行周期性计时器或 运行 交互式 GUI 等。如果你调用 asio::connect
,你的 GUI 将冻结直到函数 returns.您可以选择在与 GUI 不同的线程上调用 asio::connect
,但是您需要担心线程同步、锁、互斥等问题。
Is asio::connect a non-blocking sync, because that's what I really need?
这个问题我不是很懂,但是asio::connect
卡住了
If it's a blocking sync, then I would rather choose the asio::async_connect. Same question about asio::async_read and asio::async_write.
asio::connect
、asio::read
和asio::write
都是阻塞的。换句话说,它们将在调用点执行并阻塞直到完成。
asio::async_connect
、asio::async_read
和 asio::async_write
是它们的异步(非阻塞)对应物。当您调用其中任何一个时,它们将排队等待执行,并在您调用 io_context.run()
后执行。 (我简化了一点,但这是基本概念。)