併發編程的目的是讓程序跑的更快,但並非啓動更多的線程,這個程序就跑的更快。有如下幾種挑戰。算法
單核CPU上執行多線程任務,經過給每一個線程分配CPU時間片的方式來實現這個機制。時間片是CPU分配給每一個線程運行的時間,時間片很是短,CPU經過不斷的切換線程執行,給咱們人類留下的印象就是多個線程在同時執行。數據庫
因爲線程有建立和上下文切換的開銷,當整個程序內部操做數不高的狀況下,併發執行可能比串行執行來的慢。編程
儘量下降上下文切換的次數,有助於提升併發效率。多線程
併發編程中的另外一挑戰是死鎖,會形成系統功能不可用。死鎖是指兩個或兩個以上的進程或者線程在執行過程當中,因爲競爭資源或者因爲彼此通訊而形成的一種阻塞的現象。併發
避免死鎖的常見方法:高併發
好比說帶寬只有2Mb/s,你下載速度是1Mb/s,開10個線程速度也不會變成10Mb/s。書中提到在併發編程時須要考慮到資源上的限制。若是受制於資源,好比我數據庫鏈接數就10個,你每次用完都新建線程來作鏈接,總體程序的速度確定會慢下來。線程
解決的方法有如下幾點:協程
根據資源的限制,靈活的去調整併發度。進程