Skynet 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Skynet 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Skynet 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 C/C++ 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 2013-08-07

软件简介

Skynet 是一个基于 Actor 模式的开源并发框架。

skynet 节点,通过 master ,认识网络中所有其它 skynet 节点。它们相互一一建立单向通讯通道。也就是说,如果一共有 100 个 skynet 节点,在它们启动完毕后,会建立起 1 万条通讯通道。

这个系统是单进程多线程模型。

每个内部服务的实现,放在独立的动态库中。由动态库导出的三个接口 create init release 来创建出服务的实例。init 可以传递字符串参数来初始化实例。比如用 lua 实现的服务(这里叫 snlua ),可以在初始化时传递启动代码的 lua 文件名。

每个服务都是严格的被动的消息驱动的,以一个统一的 callback 函数的形式交给框架。框架从消息队列里取到消息,调度出接收的服务模块,找到 callback 函数入口,调用它。服务本身在没有被调度时,是不占用任何 CPU 的。框架做两个必要的保证。

一、一个服务的 callback 函数永远不会被并发。

二、一个服务向两一个服务发送的消息的次序是严格保证的。

我用多线程模型来实现它。底层有一个线程消息队列,消息由三部分构成:源地址、目的地址、以及数据块。框架启动固定的多条线程,每条工作线程不断的 从消息队列取到消息。根据目的地址获得服务对象。当服务正在工作(被锁住)就把消息放到服务自己的私有队列中。否则调用服务的 callback 函数。当 callback 函数运行完后,检查私有队列,并处理完再解锁。

线程数应该略大于系统的 CPU 核数,以防止系统饥饿。(只要服务不直接给自己不断发新的消息,就不会有服务被饿死)

由于我们是在同一个进程内工作的。所以我对消息传递做了一点优化。对于目前的点对点消息,要求发送者调用 malloc 分配出消息携带数据用到的内存;由接受方处理完后调用 free 清理(由框架来做)。这样数据传递就不需要有额外的拷贝了。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣
发表于AI & 大数据专区
2018/11/06 13:01

Skynet 1.2.0 发布,轻量级在线游戏框架

今天 Skynet 的作者云风在其博客宣布推出 skynet 1.2.0。Skynet 是一个轻量级的在线游戏框架,它也可以用于许多其他领域。 下载地址:https://github.com/cloudwu/skynet/releases/tag/v1.2.0 以下内容来自 云风的 BLOG 距离上次发布 1.1.0 已经有一年了。虽然我觉得给 skynet github 仓库里某个特定版本起个有意义的名字并无太大意义,因为我也不会刻意去维护一个所谓稳定版。但在 issues 中还是发现有一些同学还在基于上个 1....

3
16
发表了资讯
2016/07/12 00:00

Skynet 1.0.0 正式发布,开源并发框架

Skynet 1.0.0 正式发布了。经历了 5 个 RC 版后,skynet 终于迎来了第一个正式发布版 1.0.0 。 Skynet 是一个基于 Actor 模式的开源并发框架。 skynet 节点,通过 master ,认识网络中所有其它 skynet 节点。它们相互一一建立单向通讯通道。也就是说,如果一共有 100 个 skynet 节点,在它们启动完毕后,会建立起 1 万条通讯通道。 暂无该版本的改进记录,持续关注,可以点击这里。 下载地址: Source code (zip) Source code ...

4
25
发表了资讯
2015/12/29 00:00

Skynet 1.0.0 RC 版发布,开源并发框架

拖了很久,终于决定给 skynet 1.0.0 封版了。比预期的时间 足足晚了半年,好在还是在 2015 年把这个事情启动了。 其实已经很久没有对已有特性做修改了,如果的项目是在今年 3 月份以后跟进的 1.0 alpha 版的话,升级到目前的最新版本应该不会有太大痛苦。最近几个月几乎没有增加新的特性,反而是在裁减一些多余的,用的人不多的东西(为了兼容,把这样一些 API 移到了一些独立的模块中,方便废弃)。 据我所知,skynet 用于的商...

7
32
发表了资讯
2014/04/23 00:00

开源并发框架 Skynet 发布第一个正式版 v0.1.0

距离 skynet 开源项目的公布 已经有 20 月+ 了,如果从闭源阶段算起,已经超过了 30 个月。在我们公司内部有五个项目使用 skynet 开发,据有限的了解,在我们公司之外,至少有两个正式项目使用了相当长的时间。是时候发布一个正式版了。 今天 skynet 的第一个正式版本 v0.1.0 发布了。 在发布之前,我花了几天时间帮助公司内部的项目合并代码。最后全部统一使用这个版本。而在此之前,每个项目都是由一个负责人 fork 出一份,根...

6
30
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
Lua 缓冲区错误漏洞
未经控制的递归
Lua是Lua(LUA)团队的一款轻量级、扩展的开源脚本语言。 Lua Interpreter 中存在缓冲区错误漏洞,该漏洞源于产品ldo.c文件中的lua_resume未能正确处理数据文件。攻击者可通过该漏洞导致拒绝服务。以下产品及版本受到影响:Lua Interpreter 5.1.0 版本至 5.4.4 版本。
CVE-2021-43519 MPS-2021-35333
2022-08-08 19:05
Lua 安全漏洞
跨界内存写
Lua v5.4.4 及更低版本的组件 luaG_runerror 中会在发生递归错误时导致堆缓冲区溢出。
CVE-2022-33099 MPS-2022-18230
2022-08-08 19:05
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
104 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部