問題:既然說信號是中斷在進程中的模擬,那爲何中斷有同步和異步,而信號說是進程間異步通訊機制?編程
中斷:是指處理器接收到來自硬件或軟件的信號,提示發生了某個事件,應該被注意,這種狀況就稱爲中斷(wiki)。中斷改變處理器執行的指令順序。(ULK3)網絡
中斷分爲同步中斷和異步中斷:異步
同步中斷(異常,inter手冊):指令執行時由CPU控制單元產生的,之因此稱爲同步,是由於只有在一條指令終止執行後cpu纔會發出中斷。程序的錯誤產生(內核經過發送一個信號來處理異常)或內核必須處理的異常條件產生(內核修復異常,如缺頁或對內核服務的一個請求,int,sysenter指令)。unix
異步中斷(中斷,inter手冊):由其餘硬件設備依照cpu時鐘信號隨機產生的。間隔定時器和I/O設備產生的。進程
信號:用於在用戶態進程間通訊,內核也用信號通知進程系統發生的時間。信號是很短的消息,能夠被髮送到一個進程或一個進程組。事件
使用信號的兩個主要目的:讓進程知道已經發生了一個特定的事件;強迫進程執行它本身代碼中的信號處理程序。同步
由於信號的發生不可預見,因此稱信號是異步的(異步中斷確定不可預見,那這麼分析,同步中斷也是不可預見的,由於何時執行異常指令也不可預見,因此我理解應該是站的角度不一樣而致使分析不同)。網絡編程
異步:預先不知道某些事件是否會發生,何時發生,設置預期措施。軟件
同步:約定某個條件,事件發生後執行相應操做。硬件
下面站在I/O的角度上分析同步異步,阻塞與非阻塞(UNPV13)
同步和異步關注的是消息如何通知的機制。同步的狀況是由處理消息者本身去等待消息是否被觸發,而異步的狀況是由觸發機制來通知處理消息者
阻塞和非阻塞關注的是發生在消息的處理的時刻。阻塞就是等待,發出通知,等待結果完成。非阻塞是發出通知,當即返回結果,沒有等待過程。
阻塞非阻塞:能夠簡單理解爲須要作一件事能不能當即獲得返回應答,若是不能當即得到返回,須要等待,那就阻塞了,不然就能夠理解爲非阻塞。
同步異步: 你老是作完一件再去作另外一件,無論是否須要時間等待,這就是同步;異步呢則反之,你能夠同時作幾件事,並不是必定須要一件事作完再作另外一件事。同步簡單理解成一問一答同步進行,異步能夠簡單理解爲沒必要等一個問題有答了再去問另外一個問題,儘管問,有答了再通知你。(知乎)
阻塞非阻塞都是同步(非阻塞只有讀了才能寫),異步確定是非阻塞。
unix網絡編程中說到:將IO模型分爲五類:阻塞IO,非阻塞IO,IO複用,信號驅動,異步IO其中阻塞IO就是那種recv, read,一直等,等到有了拷貝了數據才返回;非阻塞就是不用等,當即返回,設置描述符爲非阻塞就好了,可是要進程本身一直檢查是否可讀;IO複用其實也是阻塞的,不過能夠用來等不少描述符;信號驅動採用信號機制等待;異步IO就不用等待了,當他告知你的時候,已經能夠返回了,數據都拷貝好了。posix.1嚴格定義的異步IO是要求沒有任何一點阻塞,而上述的前面四個(阻塞IO,非阻塞IO,IO複用,信號驅動)都不一樣程度阻塞了,並且都有一個共同的阻塞: 內核拷貝數據到進程空間的這段時間須要等待。