handlename's blog

コード片など

同期と非同期と,TCPとUDP

boost::asio使ってたらよくわかっていない自分に気がついたのでメモ。

同期通信(Synchronous I/O)

入出力処理を行った際,処理が完了するまで待つ。
完了するまでそのスレッドの処理は止まったまま。

非同期通信(Asynchronous I/O),非ブロックI/O(non-blocking I/O)

入出力処理を行った際,処理が完了するまで待たない。
入出力を行うとすぐさま次の処理に移る。

TCP

パケット送信後に送信先から受信完了の通知が返る。
通知を受け取るまでは次のパケットを送らない。
通知が来ない,あるいは「失敗した」という通知が来た場合にはパケットを再送する。

UDP

パケットを送信しても受信完了の通知は返らない。
パケットの再送も行わない。
パケットの到着は保証されない。
パケット到着順が前後する可能性がある。