并發(fā)模式之實現(xiàn)
在并發(fā)編程大行其道的今天,對協(xié)程和通道的支持成為各個平臺比不可少的一部分。雖然各家有各家的叫法,但都能滿足協(xié)程的基本要求—并發(fā)執(zhí)行和可大量創(chuàng)建。筆者對他們的實現(xiàn)方式總結(jié)了一下。
下面列舉一些已經(jīng)支持協(xié)程的常見的語言和平臺。
GoLang 和Scala作為最新的語言,一出生就有完善的基于協(xié)程并發(fā)功能。Erlang最為老資格的并發(fā)編程語言,返老還童。其他二線語言則幾乎全部在新的版本中加入了協(xié)程。
令人驚奇的是C/C++和Java這三個世界上最主流的平臺沒有在對協(xié)程提供語言級別的原生支持。他們都背負(fù)著厚重的歷史,無法改變,也無需改變。但他們還有其他的辦法使用協(xié)程。
Java平臺有很多方法實現(xiàn)協(xié)程:
· 修改虛擬機(jī):對JVM打補(bǔ)丁來實現(xiàn)協(xié)程,這樣的實現(xiàn)效果好,但是失去了跨平臺的好處
· 修改字節(jié)碼:在編譯完成后增強(qiáng)字節(jié)碼,或者使用新的JVM語言。稍稍增加了編譯的難度。
· 使用JNI:在Jar包中使用JNI,這樣易于使用,但是不能跨平臺。
· 使用線程模擬協(xié)程:使協(xié)程重量級,完全依賴JVM的線程實現(xiàn)。
其中修改字節(jié)碼的方式比較常見。因為這樣的實現(xiàn)辦法,可以平衡性能和移植性。最具代表性的JVM語言Scale就能很好的支持協(xié)程并發(fā)。流行的Java Actor模型類庫akka也是用修改字節(jié)碼的方式實現(xiàn)的協(xié)程。
對于C語言,協(xié)程和線程一樣?梢允褂酶鞣N各樣的系統(tǒng)調(diào)用來實現(xiàn)。協(xié)程作為一個比較高級的概念,實現(xiàn)方式實在太多,就不討論了。比較主流的實現(xiàn)有l(wèi)ibpcl, coro,lthread等等。
對于C++,有Boost實現(xiàn),還有一些其他開源庫。還有一門名為μC++語言,在C++基礎(chǔ)上提供了并發(fā)擴(kuò)展。
可見這種編程模型在眾多的語言平臺中已經(jīng)得到了廣泛的支持,不再小眾。如果想使用的話,隨時可以加到自己的工具箱中。
結(jié)語
本文探討了一個極其簡潔的并發(fā)模型。在只有協(xié)程和通道這兩個基本元件的情況下?梢蕴峁┴S富的功能,解決形形色色實際問題。而且這個模型已經(jīng)被廣泛的實 現(xiàn),成為潮流。相信這種并發(fā)模型的功能遠(yuǎn)遠(yuǎn)不及此,一定也會有更多更簡潔的用法出現(xiàn);蛟S未來CPU核心數(shù)目將和人腦神經(jīng)元數(shù)目一樣多,到那個時候,我們 又要重新思考并發(fā)模型了。
本文導(dǎo)航
- 第1頁: 首頁
- 第2頁: 并發(fā)模式之外延
- 第3頁: 多路復(fù)用
- 第4頁: Future技術(shù)
- 第5頁: 并發(fā)循環(huán)
- 第6頁: ChainFilter技術(shù)
- 第7頁: 共享變量
- 第8頁: 協(xié)程泄漏
- 第9頁: 并發(fā)模式之實現(xiàn)