【发布时间】:2011-07-14 01:12:49
【问题描述】:
据我所知,同步和异步操作之间的主要区别(即write() 或read() vs async_write() 和async_read())前者在操作完成之前不会返回 - 或错误,和后面的,立即返回。
由于异步操作由io_service.run() 控制,直到受控操作完成后才会完成。在我看来,在顺序操作中,与 TCP/IP 连接所涉及的协议(如 POP3)中的操作类似,其中操作是这样的顺序:
C: <connect>
S: Ok.
C: User...
S: Ok.
C: Password
S: Ok.
C: Command
S: answer
C: Command
S: answer
...
C: bye
S: <close>
同步/异步运算符的区别没有多大意义。
当然,在这两种操作中,总是存在程序流在某些情况下无限期停止的风险——比如使用计时器——,但我想知道在这件事上更权威的意见。
我必须承认这个问题的定义相当不明确,但我想听听一些关于何时使用其中一个或另一个的建议。我在使用 MS Visual Studio 调试我现在正在使用的 POP3 客户端中的异步 SSL 操作时遇到了问题,有时我认为在此使用异步可能是个坏主意。
【问题讨论】:
-
+1 甚至没有接近一个定义不明确的问题。异步编程很难,不要羞于提问。
标签: c++ asynchronous tcp boost-asio synchronous