核心:基於資源狀態的調度方式的控制權問題:有鎖無鎖調度程序員
線程:基於內核的鎖調度;編程
其它:應用層自我調度;服務器
併發編程
在過去的30年裏,計算機的性能是在摩爾定律的推進下,從如今開始,這將由Amdahl定律決定。編寫代碼,有效地利用多個處理器能夠是很是具備挑戰性的。" -Doron Rajwan 多線程
Amdahl's Law:每一個程序都分爲串行與並行部分,下降串行的比重,可提升程序的效率。架構
進行多核多服務器時代,並行併發模式更是對程序員的挑戰,如今所謂的Thread Programmer世界上也是爲數很少,由於線程表面上好像很容易,但在實際應用中真正應付大負荷運算時,原來的線程設計方案漏洞百出。併發
併發concurrency屬於問題域(problem domain), 並行parallelism屬於( solution domain)。並行和併發的區別在於有無狀態,並行計算適合無狀態應用,而併發解決的是有狀態的高性能; 有狀態要着力解決併發計算,無狀態要着力並行計算,雲計算要能作到這兩種計算自動伸縮擴展。dom
併發主要是要解決資源爭奪,併發通常發生在數據聚合的地方,只要有聚合,就有爭奪發生,傳統解決爭奪的方式採起線程鎖機制,這是強行對CPU管理線程人爲干預,線程喚醒成本高,新的無鎖併發策略來源於Java的NIO或Node.js,經過隊列+單線程操做資源的方式巧妙避免了多線程,因爲只有一個線程,在多核狀況下增長了並行計算的機會。性能
併發模型分兩種,併發基礎線程和併發組件模型,併發組件模型讓使用者接觸不到基礎線程概念,是一種簡化。做爲一個高級集成架構師,應該在程序範式的高級層次定義併發,基於組件級別的併發,而且儘量地避免涉及線程概念以及線程池等底層概念。雲計算
實現併發的途徑有兩種,基於線程和基於事件,基於線程與基於事件的併發編程之爭。url
https://www.jdon.com/46921