同步線程與異步線程的比較?(一樣適合於同步進程和異步進程) 進程和線程的同步是指:程序的執行順序徹底由代碼序列決定。 同步線程的特色: 代碼邏輯簡單,適合高併發量,可是效率低,實時性差 異步線程的特色: 效率高、實時性強,可是代碼邏輯複雜,不易於維護控制,不適合高併發量。 總之,同步線程與異步線程時互補關係。 所以,對於服務器這種須要高併發,實時性好的程序,必須採用線程的同步異步的結合 即,半同步、半異步 提升服務器性能的其餘建議? ------------建議1--------------- 空間換時間:池的概念 池子是一系列系統資源的集合。 使用池子有什麼好處呢? 通常而言,系統資源由系通通一管理(分配或釋放)。進程的池子 (一系列系統資源的集合)在進程建立的同時建立好,當進程須要池子中的 資源時,不用訪問系統內核來分配系統資源,而是直接從池子中取。同理,當 不使用時,將資源歸還到池子中,而不是系統。這避免了對系統內核的頻繁訪問 由於,系統調用存在開銷。 池子中的初始資源數量的分配策略? 1分配足夠多的資源。 2分配必定數量的資源,當不夠用時,再次從系統中獲取一些資源併入池子中。 常見的池子有哪些? 內存池、進程池、線程池、鏈接池等。進程池和線程池時用於併發編程的伎倆 進程池和線程池:進程建立之初,咱們能夠生產出一些列的進程或線程,當服務器 須要某個工做進程或工做線程來處理新到來的客戶請求時,就從進程池或者線程池 中選擇一個執行實體來處理。而無需頻繁使用fork或pthread_create來建立新的工做 進程或線程。當處理完畢,又歸還給池子。 鏈接池:當服務器程序的某些邏輯單元須要頻繁使用服務器程序與數據庫程序的鏈接 時,咱們能夠在進程建立之初,建立一系列的服務器與數據庫鏈接的集合。當某個 邏輯單元須要使用服務器鏈接數據庫時,從鏈接池中選擇一個鏈接實體使用,使用 完畢又歸還到鏈接池。 ------------建議2--------------- 避免沒必要要的數據複製: 尤爲是內核數據和應用程序代碼數據之間的複製。 用戶代碼之間的數據複製也應避免。好比,工做進程之間的 數據通訊,不該該採用管道,消息隊列,而應該能使用共享內存 來進行通訊,這樣能夠避免數據的複製。 ------------建議3--------------- 充分考慮上下文切換(即工做進程或工做線程的數量不宜過多, 通常而言不能多於CPU的數量)和鎖。通常而言,鎖適用於 併發環境下對共享資源進行保護的措施。可是,要注意兩點: 有條件時,應避免使用鎖,即便非要使用鎖,也應該儘量減小 加鎖的粒度。