C# 多線程、異步、同步之間的聯繫與區別

C# 多線程、異步、同步之間的聯繫與區別

假設這樣一個例子:
我想炒五樣菜,可是隻有兩個爐子能夠用,只能同時炒兩樣。

爐子就是線程,那同步跟異步怎麼解釋比較好?

同時炒是否是算異步?

若是是的話,那什麼狀況算同步?

 其結果是:
假如5個菜分別是A,B,C,D,E  你有兩個爐子  只能同時炒A跟B    
因此剩下的CDE只能等AB炒完了才能開始 這個等待就是同步 咱們叫作阻塞 即這個時候你只能作AB這兩個菜

假如你還有一臺咖啡機, 你在炒AB的時候 把咖啡豆跟水放到咖啡機裏打開開關 你就能夠不用去管它了
咱們說 咱們新開了一個線程煮咖啡 可是注咖啡這個動做不妨礙你炒菜 因此煮咖啡這個線程是異步的 咱們叫非阻塞

等到咖啡機 叮--- 告訴你咖啡煮好了 這個時候你去把咖啡拿出來 叮的這一聲 咱們叫通知 通知主線程也就是你 我(咖啡機)的工做作完了, 你去把咖啡拿出來 咱們叫回調 也就是 咖啡機線程完成以後 通知主線程要作的動做

簡單來說 會佔用你的時間 讓你沒法作其它事情的任務 叫同步任務(炒菜要專一 否則可能會糊鍋)。
那些不須要佔用你的時間的任務 叫異步任務 咖啡機本身會把咖啡煮好 不須要你一直看着它
備註: 
所謂的多線程,意思就是說能夠看起來像是同時在執行一系列的操做,而每一個線程則負責維護本身的線程堆棧以及執行本身的代碼;
而異步則是基於多線程的。異步意思是說一個操做在執行時不會阻止其它的線程(或者主線程)工做,同步相反;可是若是異步操做會訪問到一些資源,而這些資源有可能會在一個線程在修改它的時候被另一個線程讀取,因而這樣得出的結果就會徹底坑爹了。因此說對這種資源的保護(叫作 線程安全或者資源獨佔)是一個很重要的數據保護措施。
相關文章
相關標籤/搜索