同期と非同期と,TCPとUDP
boost::asio使ってたらよくわかっていない自分に気がついたのでメモ。
同期通信(Synchronous I/O)
入出力処理を行った際,処理が完了するまで待つ。
完了するまでそのスレッドの処理は止まったまま。
非同期通信(Asynchronous I/O),非ブロックI/O(non-blocking I/O)
入出力処理を行った際,処理が完了するまで待たない。
入出力を行うとすぐさま次の処理に移る。
TCP
パケット送信後に送信先から受信完了の通知が返る。
通知を受け取るまでは次のパケットを送らない。
通知が来ない,あるいは「失敗した」という通知が来た場合にはパケットを再送する。
UDP
パケットを送信しても受信完了の通知は返らない。
パケットの再送も行わない。
パケットの到着は保証されない。
パケット到着順が前後する可能性がある。