理解非阻塞異步概念

與進

進程(Process)是系統資源分配和調度的單元。一個運行着的程序就對應了一個進程。一個進程包括了運行中的程序和程序所使用到的內存和系統資源。如果是單核CPU的話,在同一時間內,有且只有一個進程在運行。但是,單核CPU也能實現多任務同時運行,比如你邊聽網易雲音樂的每日推薦歌曲,邊在網易有道雲筆記上寫博文。這算開了兩個進程(多進程),那運行的機制就是一會兒播放一下歌,一會兒響應一下你的打字,但由於CPU切換的速度很快,你根本感覺不到,以至於你認爲這兩個進程是在同時運行的。進程之間是資源隔離的。

那線程(Thread)是什麼?線程是進程下的執行者,一個進程至少會開啓一個線程(主線程),也可以開啓多個線程。比如網易雲音樂一邊播放音頻,一邊顯示歌詞。多進程的運行其實也就是通過進程中的線程來執行的。一個進程下的線程是共享資源的。當多個線程同時操作同一個資源的時候,就出現資源爭搶的問題。這又是另外一個問題了。

並行與併發

並行(Parallelism)是指程序的運行狀態,在同一個時間內有幾件事情並行在處理。由於一個線程在同一時間只能處理一件事情,所以並行需要多個線程在同一時間執行多件事情。

而併發(Concurrency)是指程序的設計結構,在同一時間內多件事情能被交替地處理。重點是,在某個時間內只有一件事情在執行。比如單核CPU能實現多任務運行的過程就是併發的。

同步與異步

同步異步是指程序的行爲。同步(Synchronous)是程序發出調用的時候,一直等待直到返回結果,沒有結果之前不會返回。也就是說,同步是調用者主動等待調用過程。

異步(Asynchronous)是發出調用之後,馬上返回,但是不會馬上返回結果。調用者不必主動等待,當被調用者得到結果之後會主動通知調用者。

舉個例子,去奶茶店買飲料。同步就是,一個顧客說出需求(請求),然後一直等着服務員做好飲料,顧客拿到自己點的飲料之後才離開;然後下一個顧客繼續重複上述過程。異步就是,顧客先排隊點單,點完之後拿着單子在一邊,等服務員做好之後會叫號,叫到你了你去拿就好。

所以線程跟同步異步沒有直接的關係,單線程也是可以實現異步的。

阻塞與非阻塞

阻塞與非阻塞是指等待狀態。阻塞(Blocking)是指調用在等待的過程中線程被“掛起”(CPU資源被分配到其他地方去了)。

非阻塞(Non-blocking)是指等待的過程CPU資源還在該線程中,線程還能做其他的事情。

以剛纔排隊買飲料的例子,阻塞就是你在等待的時候什麼事情也做不了,而非阻塞是你在等待的時候可以管自己先做其他的事情。

所以,同步可以阻塞也可以非阻塞,異步可以阻塞也可以非阻塞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章