2007年4月刊《程序員》,專題為“多核時下的軟件開發”。《程序員》并非陽春白雪,它面向大眾程序員。面向大眾的《程序員》介紹多核、并發,也意味著并發程序設計的開始進入中國大眾程序員的視野。
并發程序設計,在很多的書籍或者文章中,都會提到他的一個特點,復雜。這個特性,也導致了在以往并發程序設計只為高級程序員所專用。
復雜度并非事物的固有屬性,并發程序設計的復雜,是我們主觀認為。我們認為并發程序設計復雜,是因為我們還沒有掌握一些使其簡單化、清晰化的方法。當我們掌握相關方法,研究徹底,并發就會變得簡單。這個過程已經開始了。
以
往,我們需要直接使用一些低級并發概念來構造系統,不斷發明輪子,容易出錯,難以調試,這種的并發程序設計當然復雜,因此也只能為高級程序員所專用。如此
環境,就如同Dijkstra給我們帶來結構化程序設計之前的世界一般。很幸運的是,一些軟件業的先驅們,已經抽象出一些概念,能夠使得并發程序設計簡單
化,清晰化。例如Future、Lock-free思想等。
在主流編程語言中,Java走在最前頭,理念領先,提供了實用的庫。在
Java SE
5.0中就提供了util.concurent包,包括了Future、Executor、BlockingQueue等,一系列lock-free的數
據結構,例如ConcurrentMap。包括并發流程控制工具類:CountDownLatch、CycliBarrier。還有精巧好用的
DelayQueue(參考我之前寫過的文章http:
//www.cnblogs.com/jobs/archive/2007/04/27/730255.html)。使用這些概念以及提供的模式,能夠使
得編寫并發程序簡單化。
C++中,Herb Sutter在Visual C++中加入了很多支持并發的語法特性,包括atomic、future等。boost的線程庫開始引入了第一個高級概念barrier。
Windows
平臺本身提供了功能強大的并發API,包括WaitForSingle系列,WaitForMulti系列,Auto和Manual模式的Event等
等。.NET平臺基本沒有任何自有的并發庫和工具類,完全是Windows
API的簡單封裝。可以這么說,.NET的類庫沒有為并發作任何事情,完全吃Windows API的老本。
如同Herb Sutter認為,我們很幸運處于并經歷這個軟件大變革(并發)。并發進入主流這個過程將會延續數年,Herb Sutter認為是2007-2012。
參考我以前寫的一篇文章(Herb Sutter的一些觀點 http://www.cnblogs.com/jobs/archive/2006/11/12/558078.html)
類
似的場景也有,早期面向對象技術,也只為少數高級程序員所掌握,現在剛入門的程序員都能說上一大通。數據結構算法也是,早期只為少數優秀程序員所掌握,但
現在主流的開發環境中就包括了主要的數據結構和算法,會用的人一把一把,會用List、Hashtable、快速排序一點也不酷。并發程序設計也一樣,將
不再是陽春白雪!
面向對象技術在最初在Simula語言中引進,顧名思義,最初樸素的面向對象思想就是模擬,在程序中模擬真實世界。這種
“模擬”,使得程序的組織清晰化,簡單化。但真實世界是充滿著并發。真實世界的并發要比虛擬環境中的并發要復雜的多,但是人們輕松應付,由此,我們有足夠
的理由相信,并發程序設計將不會是一種復雜難掌握的技術。