设为首页 收藏本站
查看: 1032|回复: 0

[软件发布] Skynet 1.0.0 RC 版发布,开源并发框架

[复制链接]

尚未签到

发表于 2016-1-3 12:06:03 | 显示全部楼层 |阅读模式
欢迎加入运维网交流群:263444886 »   DSC0000.jpg
  拖了很久,终于决定给 skynet 1.0.0 封版了。比预期的时间 足足晚了半年,好在还是在 2015 年把这个事情启动了。
  其实已经很久没有对已有特性做修改了,如果的项目是在今年 3 月份以后跟进的 1.0 alpha 版的话,升级到目前的最新版本应该不会有太大痛苦。最近几个月几乎没有增加新的特性,反而是在裁减一些多余的,用的人不多的东西(为了兼容,把这样一些 API 移到了一些独立的模块中,方便废弃)。
  据我所知,skynet 用于的商业游戏项目(以及一些非游戏项目)早已经超过了 2 位数,收获了不错的口碑。它不再是我们自己公司的内部项目,持续收到不同人的 PR 说明很多同学不仅仅在使用,更是用心在 review 代码,让它真正成为一组公众视野下的代码。我相信这是开源的终极意义:众目睽睽之下, Bug 无所遁形。
  我们自己的项目也从 skynet 开源经营中获益良多。有好几处来源于外部的 bugfix 都是在错误发生前被堵住,只是可惜的是,我们也有项目未能及时跟进,只到真的出错了才回头发现在主干上早已改过。这些事故反而证明了开源对于提高项目质量的作用。
  这次发布 1.0.0 正式版本的候选版 (RC) ,并专门公告,就是希望有在使用 skynet 的同学,尤其是已经有项目上线运营的,能够在最后这几天将遗留问题提出来,issue 或 pr 都可以。不要把遗憾留到 1.0.1 :)
  我希望这次把 RC 标签保留一个月,在农历新年前换成正式版。
  对于因为 skynet 常年挂着 alpha (其实 beta 已经一个月了)标签还在犹豫的同学,希望换上正式版标签后可以打消你的疑虑(当然,我个人并不觉得标签换了后,代码质量会有本质变化)。
  同时不要再不断的问 “真的有项目用 skynet 的吗?”,“skynet 有文档吗?”。
  尤其对于后一个问题,我对连 README 都不看的同学,真的很烦回答啊。
  skynet 不仅有 FAQ ,也有中文的文档,而且文档更新的还很及时。麻烦你读一下 readme 以及跟着链接去看看 wiki 吧,能问出 skynet 有文档吗这种问题的同学,我相信把文档摆在他面前也是读不下去的,文档对他就没有存在意义。
  算起来从 2012 年 8 月开源发布(7 月开始写第一行代码)到现在居然已经有 3 年有余。这么一个小小的项目经历了三年,整个过程都有线上运营的项目在紧跟。为了历史兼容问题,必然有无数遗憾。传言 linus 说过,所有项目你都要做两次才明白到底怎么做。
  我不知道有没有机会重新来做 skynet 2.0 (目前没有任何这方面的计划),把我认为错误的设计,更好的设计推倒重来一次。至少可以把项目的代码风格统一一点,看起来更漂亮。
  但眼下要做的事情仅仅只是:赶紧发布第一个稳定版,让更多的人放心来用。用的人越多,后来人也就越放心。
  Skynet 是一个基于 Actor 模式的开源并发框架。
  
  skynet 节点,通过 master ,认识网络中所有其它 skynet 节点。它们相互一一建立单向通讯通道。也就是说,如果一共有 100 个 skynet 节点,在它们启动完毕后,会建立起 1 万条通讯通道。
  这个系统是单进程多线程模型。

  每个内部服务的实现,放在独立的动态库中。由动态库导出的三个接口 create init>  每个服务都是严格的被动的消息驱动的,以一个统一的 callback 函数的形式交给框架。框架从消息队列里取到消息,调度出接收的服务模块,找到 callback 函数入口,调用它。服务本身在没有被调度时,是不占用任何 CPU 的。框架做两个必要的保证。
  一、一个服务的 callback 函数永远不会被并发。
  二、一个服务向两一个服务发送的消息的次序是严格保证的。
  我用多线程模型来实现它。底层有一个线程消息队列,消息由三部分构成:源地址、目的地址、以及数据块。框架启动固定的多条线程,每条工作线程不断的从消息队列取到消息。根据目的地址获得服务对象。当服务正在工作(被锁住)就把消息放到服务自己的私有队列中。否则调用服务的 callback 函数。当 callback 函数运行完后,检查私有队列,并处理完再解锁。
  线程数应该略大于系统的 CPU 核数,以防止系统饥饿。(只要服务不直接给自己不断发新的消息,就不会有服务被饿死)
  由于我们是在同一个进程内工作的。所以我对消息传递做了一点优化。对于目前的点对点消息,要求发送者调用 malloc 分配出消息携带数据用到的内存;由接受方处理完后调用 free 清理(由框架来做)。这样数据传递就不需要有额外的拷贝了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-159854-1-1.html 上篇帖子: AppWeb 5.6.1/6.2.1 发布,嵌入式 Web 服务器 下篇帖子: Adobe Flash Player 20.0.0.267 发布
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表