同步/非同步這兩個詞不同領域的概念完全不同啊……從數位電路的角度來說,乙太網是典型的同步時序邏輯,它的時鐘訊號透過曼徹斯特編碼(以前)或者4B/5B編碼(現在)編碼到了訊號當中,接收方需要從訊號當中使用鎖相環解出這個時鐘訊號,這樣傳送方和接收方就有了一個同步的時鐘訊號。依靠這個同步的時鐘訊號接收方能夠正確讀取傳送方傳送的資料。實際上幾乎所有的高速數字傳輸協議都是同步時序邏輯。但是從軟硬體介面的角度來看,這個過程又是非同步的。計算機不會直接透過CPU指令操作當前正在傳送的資料,而是透過一系列快取,將資料送交到網絡卡,或者從網絡卡讀取資料。計算機不關心網絡卡實際上在什麼時候將資料發出,它只要將資料提交給網絡卡就可以繼續進行其他任務了,實際上提交給網絡卡這樣的工作通常也會使用DMA之類的方法。資料到來時也是一樣的,網絡卡不會在接收到網路資料包第一個位元組的時候就通知CPU處理,而是將接收到的資料先快取起來,隨時等待CPU或者DMA在合適的時候讀取。這種有緩衝區的結構是典型的非同步通訊機制。從socket介面上來看,又分為同步和非同步兩種,也可以叫做BLOCK/NONBLOCK。同步介面在不能傳送資料或者接收資料時會阻塞,直到完成;非同步介面則會通知你socket暫時不可用,讓你使用epoll等機制等待。其實雖然非阻塞一般都叫做非同步IO,真正的非同步IO應該是使用訊號通知機制的才算,但現在不太區分這個。實際上即使是所謂同步介面,在核心中仍然有緩衝區存在,只是使用者態到核心態的這一層通訊使用了同步的邏輯。所以說,你這個問題首先取決於你對同步/非同步的定義,以及在哪一層上看問題。
同步/非同步這兩個詞不同領域的概念完全不同啊……從數位電路的角度來說,乙太網是典型的同步時序邏輯,它的時鐘訊號透過曼徹斯特編碼(以前)或者4B/5B編碼(現在)編碼到了訊號當中,接收方需要從訊號當中使用鎖相環解出這個時鐘訊號,這樣傳送方和接收方就有了一個同步的時鐘訊號。依靠這個同步的時鐘訊號接收方能夠正確讀取傳送方傳送的資料。實際上幾乎所有的高速數字傳輸協議都是同步時序邏輯。但是從軟硬體介面的角度來看,這個過程又是非同步的。計算機不會直接透過CPU指令操作當前正在傳送的資料,而是透過一系列快取,將資料送交到網絡卡,或者從網絡卡讀取資料。計算機不關心網絡卡實際上在什麼時候將資料發出,它只要將資料提交給網絡卡就可以繼續進行其他任務了,實際上提交給網絡卡這樣的工作通常也會使用DMA之類的方法。資料到來時也是一樣的,網絡卡不會在接收到網路資料包第一個位元組的時候就通知CPU處理,而是將接收到的資料先快取起來,隨時等待CPU或者DMA在合適的時候讀取。這種有緩衝區的結構是典型的非同步通訊機制。從socket介面上來看,又分為同步和非同步兩種,也可以叫做BLOCK/NONBLOCK。同步介面在不能傳送資料或者接收資料時會阻塞,直到完成;非同步介面則會通知你socket暫時不可用,讓你使用epoll等機制等待。其實雖然非阻塞一般都叫做非同步IO,真正的非同步IO應該是使用訊號通知機制的才算,但現在不太區分這個。實際上即使是所謂同步介面,在核心中仍然有緩衝區存在,只是使用者態到核心態的這一層通訊使用了同步的邏輯。所以說,你這個問題首先取決於你對同步/非同步的定義,以及在哪一層上看問題。