【併發編程】摩爾定律失效「帶來」並行編程

併發和並行

在真正開始聊本文的主題以前,咱們先來回顧下兩個老生常談的概念:併發和並行。程序員

  • 併發:是指多個線程任務在同一個CPU上快速地輪換執行,因爲切換的速度很是快,給人的感受就是這些線程任務是在同時進行的,但其實併發只是一種邏輯上的同時進行;
  • 並行:是指多個線程任務在不一樣CPU上同時進行,是真正意義上的同時執行。

下面貼上一張圖來解釋下這兩個概念:編程

上圖中的咖啡就能夠當作是CPU,上面的只有一個咖啡機,至關於只有一個CPU。想喝咖啡的人只有等前面的人制做完咖啡才能製做本身的開發,也就是同一時間只能有一我的在製做咖啡,這是一種併發模式。下面的圖中有兩個咖啡機,至關於有兩個CPU,同一時刻能夠有兩我的同時製做咖啡,是一種並行模式。安全

咱們發現並行編程中,很重要的一個特色是系統具備多核CPU。要是系統是單核的,也就談不上什麼並行編程了。那麼是什麼緣由致使了現代CPU架構都是多核架構?若是CPU架構都是單核的架構咱們是否是就能不要研究什麼並行編程了?多線程

"摩爾定律"失效

上面章節中留下了一個問題:爲何現代CPU都是多核架構。爲了回答這個問題,咱們先來了解一個定律--摩爾定律。架構

1965年,英特爾聯合創始人戈登·摩爾提出以本身名字命名的「摩爾定律」,意指集成電路上可容納的元器件的數量每隔 18 至 24 個月就會增長一倍,性能也將提高一倍。併發

根據摩爾定律,CPU的性能每隔18到24個月就能增加一倍。可是從如今的狀況來看,單核CPU的主頻已經逼近了極限,以如今的製造工藝,很難再繼續提高單核CPU的主頻。也就是說摩爾定律已經失效。性能

雖然摩爾定律失效了,可是科技的進度對CPU性能的需求沒有中止。這個也難不倒咱們偉大的硬件工程師。一個CPU的性能提高有限,我將兩個CPU拼在一塊兒性能不就提高一倍了麼。因而多核CPU的架構就出現了。線程

提升CPU工做主頻主要受到生產工藝的限制。因爲CPU是在半導體硅片上製造的,在硅片上的元件之間須要導線進行聯接,因爲在高頻狀態下要求導線越細越短越好,這樣才能減少導線分佈電容等雜散干擾以保證CPU運算正確。所以製造工藝的限制,是CPU主頻發展的最大障礙之一。設計

多核架構引起並行編程

爲了繼續保持性能的高速發展,硬件工程師破天荒地想出了將多個CPU內核塞進一個CPU裏的奇妙想法。由此,並行計算就被很是天然地推廣開來,隨之而來的問題也層出不窮,程序員的黑暗時期也隨之到來。簡化的硬件設計方案必然帶來軟件設計的複雜性。換句話說,軟件工程師正在爲硬件工程師沒法完成的工做負責,他們將摩爾定律失效的責任推給了軟件開發者。3d

因此,如何讓多個CPU有效而且正確地工做也就成了一門技術,甚至是很大的學問。好比,多線程間如何保證線程安全,如何正確理解線程間的無序性、可見性,如何儘量地設計並行程序,如何將串行程序改造爲並行程序。而對並行計算的研究,也就是但願給這片黑暗帶來光明。

總結

世界就是這樣一個矛盾體,併發編程能讓咱們充分地利用CPU資源,提高系統性能。可是同時也給咱們帶來了不少問題,好比線程上下文切換對性能消耗的問題、共享變量的線程安全問題、線程死鎖問題和線程間通訊等問題。研究並行編程就是研究怎麼在享受多線程編程給咱們帶來便利的同時又能規避多線程帶來的坑。

相關文章
相關標籤/搜索