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