題一,同步和非同步有啥區別?
題二,TCP與UDP有啥區別?
題三,程序和執行緒有啥區別?

題一答案:

同步(Sync):所有的操作都做完,才返回給使用者。這樣使用者線上等待的時間太長,給使用者一種卡死了的感覺(比如系統遷移中,點選了遷移,介面就不動了,但是程式還在執行,卡死了的感覺)。

這種情況下,使用者不能關閉介面,如果關閉,那麼遷移程式也會中斷,使用者體驗不好。

非同步(Async):將使用者請求放入訊息佇列,並反饋給使用者,比如系統遷移程式已經啟動,提示你可以關閉瀏覽器了。然後程式再慢慢地寫入資料庫。但是使用者沒有卡死的感覺,使用者體驗較好。

題二答案:

1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線

2、TCP提供可靠的服務。它通過校驗和,丟包時的重傳控制,序號標識,滑動視窗、確認應答,次序亂掉的分包進行順序控制實現可靠傳輸。即通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達; UDP盡最大努力交付,即不保證可靠交付。

3、UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高要求的通訊或廣播通訊場景。

4、每一條TCP連線只能是點到點的; UDP支援一對一,一對多,多對一和多對多的互動通訊方式。

5、TCP對系統資源要求較多,UDP對系統資源要求較少。

UDP有時比TCP更有優勢:

UDP以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP, 如實時遊戲。

(1)網速的提升給UDP的穩定性提供可靠網路保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)TCP為了實現網路通訊的可靠性,使用了複雜的擁塞控制演算法,建立了繁瑣的握手過程,由於TCP在內建的系統協議棧中,極難對其進行改進。

採用TCP,一旦發生丟包,TCP會將後續的包快取起來,等前面的包重傳並接收到後再繼續傳送,延時會越來越大。

基於UDP對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路問題造成的影響。

題三答案:

  1. 程序是資源分配的最小單位。
  2. 執行緒是程式執行的最小單位,也是處理器排程的基本單位,但程序不是,兩者均可併發執行。

  3. 程序有自己的獨立地址空間,每啟動一個程序,系統就會為它分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,這種操作非常昂貴。而執行緒是共享程序中的資料,使用相同的地址空間,因此,CPU切換一個執行緒的花費遠比程序小很多,同時建立一個執行緒的開銷也比程序小很多。

  4. 執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以通訊的方式(IPC)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。但是多程序程式更健壯,多執行緒程式只要有一個執行緒死掉,整個程序也跟著死掉了,而一個程序死掉並不會對另外一個程序造成影響,因為程序有自己獨立的地址空間。

  5. 程序切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用執行緒要好於程序。同樣如果要求同時進行並且又要共享某些變數的併發操作,只能用執行緒不能用程序。

  6. 執行過程:每個獨立的程序有一個程式執行的入口、順序執行序列和程式入口。但是執行緒不能獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

優缺點:

執行緒執行開銷小,但是不利於資源的管理和保護。執行緒適合在SMP機器(雙CPU系統)上執行。

程序執行開銷大,但是能夠很好的進行資源管理和保護,可以跨機器遷移。

何時使用多程序,何時使用多執行緒?

對資源的管理和保護要求高,不限制開銷和效率時,使用多程序。
要求效率高,頻繁切換時,資源的保護管理要求不是很高時,使用多執行緒。