Vert.x性能如何,如何評價Vert.x萬事皆非同步的特性?
這個問題有一個叫做techempower的網站,定期會做一個幾乎是全部web servers的大比武
TechEmpower Web Framework Performance Comparison自己看看就知道了,基本上說jvm的性能表現是剛剛的,所以說jvm是你能找到的最好的vm不是胡說八道,其次jvm上的netty系的表現是剛剛的,用netty的框架,軟體伺服器等排名都比較靠前,那麼基於jvm和netty的vert.x,自然表現不俗,另外vert.x對於性能的優化還沒有做到極致,java的aio還有優化的空間,但是需要你手動去處理了,其實也沒有必要,vert.x已經是比較上層的框架了,比起netty來說,使用起來容易不少,所以沒有必要過度優化,我們用1核1g的雲上虛擬伺服器輕鬆host上千個並發請求,以前用tomcat,難用得要命,加上spring更是,單啟動就需要幾分鐘,我去
另外vert.x並不是萬物皆非同步,它允許同步的存在,只是它的api會儘可能地包裝成非同步,同步的話會堵塞thread,所以要放在worker verticle中去跑,但是這樣就會堵塞線程,那麼並發時候就需要擴充線程池以滿足需要,比起非同步來說,堵塞線程用線程池的方式顯得太過於奢侈了,尤其是互聯網時代,並發訪問很容易暴漲的前提下,任何一點節省,在大並發的背景下,都顯得非常的可觀,當然也對程序猿本身提出了更高的要求
vert.x本身用好對於程序猿要求比較高,需要了解什麼是非同步,什麼是狀態,什麼是無副作用的函數等很多比較科班的概念,涉及到非同步的話需要了解底層os的一些概念,尤其是協程,狀態和副作用這些對於函數式編程提出了要求,這些年矽谷很火的fp不是完全沒有道理,雖然我也認為fp火得有些過頭了,有些孔乙己和國學的味道了,但是一些基礎的副作用,1st class citizen這些基本的概念還是要了解和掌握強烈鄙視來賣書的,akka在techempower上又不是沒有比賽,自己看看那個排名都低到什麼地步去了,netty只是一個網路協議的封裝而已,vert.x是並發模型的實現,兩個幾乎是不同的東西,還什麼「又」封裝了一層,無知者無畏,至於promise什麼,那都是什麼玩意啊,future這個用的是vert.x自己實現的future,官方討論的是要不要用java的completable future,其它框架的走開吧,官方正在把future變得更加fluent,akka最新版的網路介面也不用netty了,所以來賣書的傢伙也是夠了,做廣告的真心噁心,vert.x不賣書,來,免費給中文翻譯,不賺程序猿的錢,程序猿們,拿你們的錢去泡妞也不要給黑心商人賺走:
介紹 · Vert.x 官方文檔中文翻譯
Vert.x基於Netty實現的。
性能自然好,就是又封裝了一層API
其中Vert.x的線程模型是基於EventLoop的模型,也就是Node那一套,而Promise和Future又是重新實現了的。
雖然我更加喜歡Akka,但是不排除Vert.x是非常好的框架。
當然,我也可以用Akka的EventStream來做一些看起來很高大上,實際上比較初級的體力活。
您可以購買我翻譯的《Netty實戰》這本書。
如何評價《Netty實戰》這本書? - 知乎京東預售鏈接(優先發貨):《Netty實戰》([美]諾曼·毛瑞爾(Norman Maurer),馬文·艾倫·沃爾夫泰爾(Marvin Allen Wolfthal))
推薦閱讀: