1. 程式人生 > >同步和非同步的區別及優缺點

同步和非同步的區別及優缺點

同步和非同步的區別及優缺點

程式裡面的同步和非同步和我們現實生活理解不太一樣,一般我們對同步的理解是同時做很多事情,但程式中的同步是按照任務的順序執行任務,前一個任務沒有執行結束,下一個任務不會執行,要等待上一個任務執行結束。

通俗舉例:
我大學有個室友袁大炮,我們都叫他炮哥。大學開始時炮哥很單純,和女生告白,在同一時間內只和一個女孩表白,
等人家姑娘拒絕他後才向另外一個女生表白,這就是我們所謂的同步,等上一個表白結束了才會和開始追求另外一個女生。

非同步:是同一時間內可以做多件事,(這往往伴隨著多執行緒,關於執行緒接下來我也會寫一篇《javascript的單執行緒與非同步》進行簡單分析介紹)

通俗舉例:
後來過來一段時間炮哥變風流了,他開始同時和多個女生表白,給一個姑娘表白不等姑娘回覆就給另外一個姑娘表白,這就是我們所謂的非同步。

當然,同步非同步的含義不能這麼表述,我們這樣解釋只是為了容易理解。

比較總結:

我們炮哥前後不同的行為來分析一下同步與非同步的優缺點:
1、當炮哥同一時間內只表白一個女生的時候,如果女生拒絕了他,中間可能要等等待姑娘很長的回覆時間,脫單的效率會很低;
2、同時表白多個姑娘的話,他可以利用姑娘回覆的這段時間表白其他姑娘, 這樣炮哥脫單效率就會變得很高,但這樣也會帶來其他問題,
   比如要耗費大量的精力財力,並且有可能多個女生關係處理不好,不便控制,容易發生意外情況。

所以同步和非同步主要的優缺點我們就總結出來了:

1、同步的執行效率會比較低,耗費時間,但有利於我們對流程進行控制,避免很多不可掌控的意外情況;
2、非同步的執行效率高,節省時間,但是會佔用更多的資源,也不利於我們對程序進行控制

附:
出處:https://blog.csdn.net/qq_21033663/article/details/51564786
在網上看到的一個比較詳細的同步非同步的比較,分享給大家,大家看比較重要的幾點,我將用“*”標出重要的點:
非同步的使用場景:

1、*不涉及共享資源,或對共享資源只讀,即非互斥操作
2、*沒有時序上的嚴格關係
3、不需要原子操作,或可以通過其他方式控制原子性
4、*常用於IO操作等耗時操作,因為比較影響客戶體驗和使用效能
5、*不影響主執行緒邏輯

同步的使用場景:

不使用非同步的時候

同步的好處:

1、同步流程對結果處理通常更為簡單,可以就近處理。
2、同步流程對結果的處理始終和前文保持在一個上下文內。
3、同步流程可以很容易捕獲、處理異常。
4、同步流程是最天然的控制過程順序執行的方式。

非同步的好處:

1、非同步流程可以立即給呼叫方返回初步的結果。
2、非同步流程可以延遲給呼叫方最終的結果資料,在此期間可以做更多額外的工作,例如結果記錄等等。
3、非同步流程在執行的過程中,可以釋放佔用的執行緒等資源,避免阻塞,等到結果產生再重新獲取執行緒處理。
4、非同步流程可以等多次呼叫的結果出來後,再統一返回一次結果集合,提高響應效率。

文章不足之處希望大家進行批評指正,共同進步!
本文原創,轉載和使用請註明出處
交流聯絡QQ:1670765991