當前位置:
首頁 > 知識 > 編程語言與並發性之間到底有沒有關係?

編程語言與並發性之間到底有沒有關係?

為什麼今天會想到聊編程語言和並發性之間的關係呢?前不久,Python核心開發團隊發布了基於Python路線圖的四大修復點,IT168企業級也對此進行了具體報道(詳情可了解:《全面的4大修復,過早的暴露了Python幹掉Java的野心?》),編程語言的更新迭代本是家常便飯,各家粉絲的口水戰也是見怪不怪,但有一位網友的評論卻激起了千層浪:

編程語言與並發性之間到底有沒有關係?

除了部分嘲諷之外,跟帖的網友中也出現了一些觀點分類:

一部分認為編程語言與並發性之間本質上沒有任何關係;

網友|蘑菇騎士|:並發量跟語言關係不大。

網友修影無痕:並發多少和語言沒有太大的關係吧。cpp支持10億並發需要1000台伺服器,java也許就2000吧。

網友EmacserVimer:你還需要回爐重造啊!至於為什麼我就不解釋了!

一部分認為Java的這種並發性與其虛擬機有關,而虛擬機就是用C和C++編寫的!

網友子子叔:java跑來跑去需要虛擬機,java虛擬機是用什麼語言寫的你不知道嗎?

網友尼古拉斯曉哲:java底層是用什麼實現的?還不是C和C++嗎?你用Java做成本要高不知道多少倍好不啦!

那麼,問題來了:編程語言和並發性之間到底有沒有關係?可以說一門編程語言在語言層面支持並發性嗎?這裡的並發性又指什麼呢?

在計算機科學中,並發性(Concurrence)是指在一個系統中,擁有多個計算,這些計算有同時執行的特性,而且他們之間有著潛在的交互。程序員日常討論的並發性更多的是在操作系統層面而非編程語言層面。

筆者就此特意詢問了阿里內部的資深JVM架構師,他認為,可以說一門編程語言在語言層面支持並發,這種說法是可以的。但並發是一個很廣的概念,比如java有並發library:java.util.concurrent,而線程是一個動態的概念,如果說這種並發性是指多線程的話,線程來實現並發也是這樣說。上述網友評論中的並發表達的意思更側重於在同一時間內處理多請求數目的能力,與編程語言本身也就是Java有關,但編程語言之間的並發性似乎不好對比,因為並發性與架構和設計都有很大關係。Java具備並發性,但並不是說其他編程語言做不了,比如Facebook的高並發就不是Java支撐的。

除了Java之外,還有哪些編程語言支持並發性呢?在某知識問答社區,筆者發現了對Go語言並發性的討論,同時很多人認為Go語言對並發性的支持是非常不錯的,比如:

編程語言與並發性之間到底有沒有關係?

對於語言層面支持並發,這位介紹為「愛寫程序的研究員」的網友給出了一個十分有條理的回答:

編程語言與並發性之間到底有沒有關係?

針對上圖中提到的Erlang,如果程序員想認真了解,倒不妨看一下《Erlang程序設計2th》一書,這本書以Erlang為例,講解了編程語言的並發性,或許可以對上述一系列問題進行解答。這本書中有這樣一段話:編程語言有兩種:順序和並發。順序語言被設計用於編寫順序程序,沒有描述並發計算的語言結構。並發編程語言被設計用於編寫並發程序,語言本身帶有表達並發性的特殊結構。這位作者很明顯也認同編程語言層面具備並發性的說法,甚至據此將編程語言分為了兩類。

綜述

從上述的多方觀點中不難看出,編程語言確實與並發性有一定關係,編程語言層面的並發性這一說法也是合理的。而這種並發性可能是通過庫、關鍵字、特定語法或函數等來實現,但並發性的定義非常廣泛,不等同於在同一時間內處理多請求數目的能力。在實際企業應用中,很少直接對比編程語言之間的並發性,並發性可以通過架構設計等來綜合體現,企業對一門編程語言的選取往往是結合多方面因素的。(如果想了解阿里對java的運用,推薦閱讀:《支撐雙11每秒17.5萬單事務 阿里巴巴對JVM都做了什麼?》)

所以,廣大程序員是否同意上述觀點呢?是否認同編程語言與並發性之間的關係呢?

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT168企業級 的精彩文章:

企業溝通又一利器 70萬家企業在用月話務量超2億分鐘
雲時代,揭開性能監測戰略的隱秘優勢
數K8S無伺服器風流人物,還得看Kubeless
如何將機器學習融到企業的開發周期中?
投資5億美金提升服務能力 華為企業服務營收再創新高

TAG:IT168企業級 |