目前使用者最多的开源游戏服务器端框架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重要迭代版本推出相关推荐

  1. 广和通5G模组FG360系列推出最新迭代版本,持续释放5G FWA商业价值

    近期,广和通正式推出5G模组FG360系列的最新迭代版本,在射频架构.吞吐量.天线设计上均具有关键技术突破.全新FG360系列采用相对更灵活的架构,更适合做区域或客户项目的定制裁剪.得益于上一代产品的 ...

  2. 源码推荐:基于uni-app前端框架,开源版本还开源免费商用

    今天要给大家介绍一款电商软件,目前有两个主流版本:免费开源版.商业开源版.首先需要和大家普及下什么是开源软件? 提到开源,一定绕不开Linux.Linux 是一款开源软件,我们可以随意浏览和修改它的源 ...

  3. 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表

    前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...

  4. 基于MT6752/32平台 Android L版本驱动移植步骤

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

  5. 2021-10-09 求二叉树的高度(递归和迭代版本)

    剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 和题解写的一比,我写的 ...

  6. 学习笔记(35续):Python网络编程并发编程-基于gevent及线程池实现的并发套接字通讯

    1.基于线程池实现并发套接字通讯:因为套接字涉及地是I/O密集模型,因此使用多线程会有高效率 ''' 服务器 '''#基于线程池完成并发的套接字通讯 from socket import * from ...

  7. 【华为云技术分享】基于Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现(Python版本)

    摘要:本文将为大家带来使用Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现的展示. 前言 YOLOv3可以算作是经典网络了,较好实现了速度和精度的Trade off,成为和目 ...

  8. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(二):Apache安装和配置

    基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...

  9. 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django

    近期开始学习基于Linux平台的Django开发,想配置一台可以发布的服务器,经过近一个月的努力,终于掌握了基于Apache和mod-wsgi插件的部署模式,自己也写了一个教程,一是让自己有个记录,二 ...

最新文章

  1. Python3 高级特性
  2. 《奠基计算机网络》清华大学出版社 之 IPv6和IPv4共存技术
  3. IE11不支持Selenium 2.0的解决方法
  4. jms和activemq
  5. 只有1kb的清理软件_教您清理1kb快捷方式病毒
  6. 百度url提交入口 百度网站收录提交入口网址
  7. 移动端图形化报表界面设计_移动端报表设计-帆软
  8. c语言剧透,破镜重圆 ·《C语言修仙》by 十四洲
  9. cmd命令窗口如何创建和删除文件、文件夹,写入内容到文件
  10. java EE初阶 —进程与线程的区别
  11. 一次github和jenkins集成构建异常处理
  12. 如何使用iPhone生存僵尸启示录
  13. 数字视频稳定处理面临的困难
  14. 电影管理软件+android,影视多媒体管理软件Media Companion
  15. windows 8 中系统盘[右键菜单新建]中没有文件选项问题
  16. HTML/CSS自制网页
  17. html自定义图例,javascript – ChartJS v2.0的自定义图例
  18. Photoshop纯净版简单安装无需秘钥(附加PS教程) 百度网盘
  19. 最小堆以及最小优先队列的实现
  20. 安卓system镜像分区_如何完全备份android系统上的system分区和data分区

热门文章

  1. 数据结构(一)求矩阵中的鞍点
  2. 欧拉角,万向节锁和四元数
  3. 字符串(づ。◕‿‿◕。)づ进阶之章
  4. 骑马与砍杀服务器连接中断,骑马与砍杀为什么显示无法连接服务器 | 手游网游页游攻略大全...
  5. 可使用计算机打印的方式替代,邮政投递员高级理论知识试卷01
  6. 01背包python解法_0-1背包问题及Python代码实现
  7. Qualcomm msm8996 调试AMOLED屏
  8. mysql locate不走索引_面试--mysql的模糊查询优化、like、locate、position、instr、find_in_set...
  9. r安卡翻译成英文_WOW英文缩写翻译,新人必看!
  10. MySQL事务——万字详解