[英]asio::async_connect vs asio::connect. Is asio::connect a non-blocking sync?
我正在使用 asio 1.18.1 獨立版本(沒有提升),我想知道asio::connect
和asio::async_connect
之間的區別。
我可以告訴自己為什么我的服務器需要異步,因為異步的要點是能夠同時處理許多不同連接上的大量數據。
但是當涉及到客戶端時,我真的只需要一個非阻塞線程,並且一個線程的異步不是沒用嗎? asio::connect
是非阻塞同步,因為那是我真正需要的嗎? 如果是阻塞同步,那么我寧願選擇asio::async_connect
。 關於asio::async_read
和asio::async_write
相同問題。
我使用的是 asio 1.18.1 獨立版本(無提升),我想知道 asio::connect 和 asio::async_connect 之間的區別。
asio::connect
嘗試在調用點連接套接字,並會阻塞直到建立連接。 換句話說,如果解析一個 DNS 地址需要例如 20 秒,它將在整個持續時間內阻塞。
asio::async_connect
將簡單地將連接請求排隊,並且在您調用io_context.run()
(或其他函數,例如run_once()
等)之前不會實際執行任何操作。
我可以告訴自己為什么我的服務器需要異步,因為異步的要點是能夠同時處理許多不同連接上的大量數據。
我既不能證實也不能否認。
但是當涉及到客戶端時,我真的只需要一個非阻塞線程,並且一個線程的異步不是沒用嗎?
不必要。 如果您想在同一線程上做其他事情,例如顯示連接進度、執行定期計時器或運行交互式 GUI 等。如果您調用asio::connect
,您的 GUI 將凍結,直到函數返回。 您可以選擇在與 GUI 不同的線程上調用asio::connect
,但是您需要擔心線程同步、鎖、互斥體等。
asio::connect 是非阻塞同步,因為那是我真正需要的嗎?
我不太明白這個問題,但是asio::connect
正在阻塞。
如果是阻塞同步,那么我寧願選擇 asio::async_connect。 關於 asio::async_read 和 asio::async_write 的相同問題。
asio::connect
、 asio::read
和asio::write
都是阻塞的。 換句話說,它們將在調用點執行並阻塞直到完成。
asio::async_connect
、 asio::async_read
和asio::async_write
是它們的異步(非阻塞)對應物。 當您調用任何一個時,它們將排隊等待執行,並且一旦您調用io_context.run()
就會被執行。 (我簡化了一點,但這是基本概念。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.