基于Gevent的firefly重要迭代版本推出
目前使用者最多的開源游戲服務器端框架Firefly推出了基于Gevent的重要迭代版本,不過目前還處在alpha階段。Firefly團隊使用Gevent完整實現了之前Firefly所依賴twisted內的部分,并還原了api,讓使用者可以無需再次學習。
Firefly-gevent 是Firefly的gevent版本。相比之前的Firefly版本使用的Twisted,Gevent更加的精簡。
gevent就是一個基于coroutine的python網絡開發框架。協程是一種并發模型,但不同于thread和callback,它的所有task都是可以在一個線程里面執行,然后可以通過在一個task里面主動放棄執行來切換到另一個task執行,它的調度是程序級的,不像thread是系統級的調度。
Gevent最明顯的特征就是它驚人的性能,尤其是當與傳統線程解決方案對比的時候。在這一點上,當負載超過一定程度的時候,異步I/O的性能會大大的優于基于獨立線程的同步I/O這幾乎是常識了。同時Gevent提供了看上去非常像傳統的基于線程模型編程的接口,但是在隱藏在下面做的是異步I/O。更妙的是,它使得這一切透明。(此處意思是你可以不用關心其如何實現,Gevent會自動幫你轉換)
忽略其他因素,Gevent性能是線程方案的4倍左右(在這個測試中對比的是Paste,譯者注:這是Python另一個基于線程的網絡庫)
與單進程多線程模型相比,多進程和協程是更加Scalable的模型。在高并發場景下,采用多進程模型編制的程序更加容易Scale Out,而協程模型可以使單機的并發性能大幅提升,達到Scale Up的目的。所以,未來服務器端并發模型的標配估計會是:每個核一個進程,每個進程是用協程實現的微線程。
在編碼方面,多線程模型帶來的共享資源加解鎖的問題一直是程序員的夢魘。而用多進程模型編程時,會自然鼓勵程序員寫出避免共享資源的程序,從而提高魯棒性。而Python目前的協程實現都為非搶占式調度,程序員自行控制協程切換時機,因此也可以避免絕大多數令人頭疼的加解鎖問題。這些都利于寫出更穩定的代碼。
另外,和同樣具有很好并發性能的事件驅動模型相比,用協程實現的微線程,在邏輯表達上非常友好和直白,無須在不知道什么時候會發生的event和一層套一層的callback中糾結和扭曲(正如Twisted其名)。對于寫過多線程程序的程序員而言,協程帶來的微線程模型幾乎可以實現無痛提高并發性能。
firefly-gevent結合了gevent的性能,封裝了網絡IO處理、數據庫IO讀寫緩存、分布式進程間接口調用。這樣使得游戲服務端的開發變得更加的輕松簡單,開發者不必在面對這些的技術難題,專心致力于游戲玩法邏輯的開發。
文章轉載自 開源中國社區 [http://www.oschina.net]
總結
以上是生活随笔為你收集整理的基于Gevent的firefly重要迭代版本推出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现累加问题
- 下一篇: 吴晓华当选河北省衡水市市长