1. 程式人生 > >socket有沒有同步寫一說(怎麼判定資料一定達到了對端?還得使用者態)

socket有沒有同步寫一說(怎麼判定資料一定達到了對端?還得使用者態)

網路上的同步寫和非同步寫和磁碟的同步和非同步不一樣

網路上的同步寫是寫到tcp的緩衝區中,如果緩衝區沒有地方了,那麼是直接返回給使用者態程式還是讓使用者程式卡住,這個是阻塞和非阻塞發生的地方。

注意:阻塞是指tcp緩衝區中是否有數,然後在機器不重啟的情況下,tcp協議會保證你的資料到達對端!!!!也就是tcp協議是一種同步的協議!tcp協議就是檔案系統中的“同步寫”,他會有各種各樣的機制來保證資料一定會達到對端!當然了這一路可能發生各種各樣的事情!比如我傳送端機器異常重啟了,比如對端機器down機了,比如中間路由器掛掉了,所以在網路傳輸中,是怎麼判斷資料到沒到對端?

有沒有一種語義,我這條資料一定達到了對端

?只能通過使用者態來保證了,比如收到了資料之後,返回一條確認資料,然後對端接收,返回一個確認收到的資料包,只有使用者態才能做這件事情。

使用者態怎麼判定資料一定達到了對端?

tcp連結我們知道資料一定是對到達對端的,但是這些超時重傳啊什麼的,都是核心態的行為,使用者態怎麼知道資料傳送到沒有。

這就是tcp的同步,那麼放到了tcp的緩衝區之後,到底是誰傳送出去的呢?是當前執行緒還是別的執行緒捏?【一切與檔案系統對標,哈哈哈哈哈】

阻塞!