1 skynet介绍

​ Skynet 是一个基于C跟lua的开源服务端并发框架,这个框架是单进程多线程Actor模型。是一个轻量级的为在线游戏服务器打造的框架。

我在云风博客的基础上,把重要的知识点加上具体的example来讲解skynet如何去使用。前面的比较啰嗦一些,大家不想了解这些知识的,可以直接跳转到第二章节。

1.1 简介

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

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

​ skynet虽然支持集群,但是作者云风主张能用一个节点完成尽量用一个节点,因为多节点通信方面的开销太大,如果一共有 100 个 skynet 节点,在它们启动完毕后,会建立起 9900条通讯通道。

1.2 特点

Skynet框架做两个必要的保证:

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

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

​ 用多线程模型来实现它。底层有一个线程消息队列,消息由三部分构成:源地址、目的地址、以及数据块。框架启动固定的多条线程,每条工作线程不断从消息队列取到消息,调用服务的 callback 函数。

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

​ 对于目前的点对点消息,要求发送者调用 malloc 分配出消息携带数据用到的内存;由接受方处理完后调用 free 清理(由框架来做)。这样数据传递就不需要有额外的拷贝了。

​ 做为核心功能,Skynet 仅解决一个问题:

​ 把一个符合规范的 C 模块,从动态库(so 文件)中启动起来,绑定一个永不重复(即使模块退出)的数字 id 做为其 handle 。模块被称为服务(Service),服务间可以自由发送消息。每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息。每个服务都是被一个个消息包驱动,当没有包到来的时候,它们就会处于挂起状态,对 CPU 资源零消耗。如果需要自主逻辑,则可以利用 Skynet 系统提供的 timeout 消息,定期触发。

1.3 Actor模型

1.3.1 Actor模型介绍

​ **Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用Actors模型进行并发编程可以很好地避免这些问题,Actor由状态(state)、行为(Behavior)和邮箱(mailBox)三部分组成**

  1. 状态(state):Actor中的状态指的是Actor对象的变量信息,状态由Actor自己管理,避免了并发环境下的锁和内存原子性等问题

  2. 行为(Behavior):行为指定的是Actor中计算逻辑,通过Actor接收到消息来改变Actor的状态

  3. 邮箱(mailBox):邮箱是Actor和Actor之间的通信桥梁,邮箱内部通过FIFO消息队列来存储发送方Actor消息,接受方Actor从邮箱队列中获取消息

Actor的基础就是消息传递,skynet中每个服务就是一个LUA虚拟机,就是一个Actor。

1.3.2 Actor模型好处

  1. 事件模型驱动: Actor之间的通信是异步的,即使Actor在发送消息后也无需阻塞或者等待就能够处理其他事情。

  2. 强隔离性: Actor中的方法不能由外部直接调用,所有的一切都通过消息传递进行的,从而避免了Actor之间的数据共享,想要观察到另一个Actor的状态变化只能通过消息传递进行询问。

  3. 位置透明: 无论Actor地址是在本地还是在远程机上对于代码来说都是一样的。

  4. 轻量性:Actor是非常轻量的计算单机,只需少量内存就能达到高并发。

skynet框架应用 (一) skynet介绍相关推荐

  1. skynet框架的设计结构

    前言:skynet 是一个为网络游戏服务器设计的轻量框架.当然,它并不只是用于游戏服务器框架,不过,作为一个游戏开发者,自然是把skynet当做一个游戏服务框架来看待,更何况我是一个后台服务器开发的程 ...

  2. skynet框架应用 (十二) snax框架

    12 snax框架 ​ snax 是一个方便 skynet 服务实现的简单框架.(简单是相对于 skynet 的 api 而言) ​ 使用 snax 服务先要在 Config 中配置 snax 用于路 ...

  3. skynet 框架snax源码分析----变量注入

    skynet为了简化服务的编写,推出了snax框架,源码里也有一个例子pingserver.这是snax原创文章的第一篇,所以先就分析snax框架里的interface.lua源码,它的实现应用了一个 ...

  4. skynet框架应用 (八) Multicast组播

    8 Multicast组播 8.1 Multicast介绍 local mc = require "skynet.multicast" ​ 引入 multicast 模块后,你可以 ...

  5. 【skynet学习笔记】skynet的目录结构

    [skynet学习笔记]skynet的目录结构 skynet目录结构 学习skynet必须先了解一下skynet的目录结构. skynet的目录结构十分清晰,一目了然. 下面来具体看看各个目录. [r ...

  6. Ext2.0框架的Grid使用介绍(转)

     Ext2.0框架的Grid使用介绍 最近空闲时间在学习Ext2.0框架,只有一个字的感叹"强",我从未想到JS代码能够写出这么绚丽的Web页面出来,以前看到YUI,惊若天人,如今 ...

  7. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  8. 直播 | 清华大学王晨阳:轻量级Top-K推荐框架及相关论文介绍

    「PW Live」是 PaperWeekly 的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交流可能会让知识的传播更加有意义, ...

  9. xmpp整理笔记:xmppFramework框架的导入和介绍

    一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 往期回顾: xmpp整理笔记:环境的快速 ...

最新文章

  1. halcon 旋转_HALCON高级篇:3D相机标定(2/3)
  2. 成功解决OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor
  3. Codeforces Round #345 (Div. 2)
  4. 商品pid是什么意思_0基础搞懂自动驾驶传统算法与深度学习的鸿沟-PID控制算法与MLP优化方法...
  5. Mr.J-- HTTP学习笔记(八)-- 网关
  6. mysql 完整性概念_mysql基础知识
  7. 为什么中国有很大一部分人不愿使用windows10?
  8. Cisco Packet Tracer 思科模拟器中路由器的DHCP配置
  9. 保护电路:简单的限流保护电路图
  10. 北航超算运行matlab,工信部网:北航学子荣获ASC19世界大学生超算竞赛最高计算性能奖...
  11. fastadmin 微信支付宝整合插件 支付宝APP支付 ALIN10146
  12. C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法
  13. 计算机主机光盘故障,电脑开机之后提示插入安装光盘的解决方法
  14. java全国二级考点,java计算机全国二级考试时间
  15. 2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
  16. 互联网 IT 精英:龙泉寺静心之旅 1
  17. 中国的数字化转型 China’s digital transformation
  18. k8s(kubernetes)通过yaml从harbor拉取镜像(史诗级,保姆级)
  19. mobot_room.world-ROS2Gazebo9附1
  20. 16.停车场车位识别

热门文章

  1. 契约锁助力上市公司IPO申报 信息披露、重大事项决策等文件网上签
  2. lqc_使用SNAT、DNAT策略实现网关应用
  3. ICLOUD储存空间要升级吗_iPhone正确使用iCloud云空间,拒绝已满
  4. MMSC BAPI/自动扩充库位
  5. JS中什么是DOM和BOM
  6. Spring-boot-email邮件
  7. 3DMax 2020中文版
  8. 高清摄像头MIPI CSI2接口浅解【转】
  9. 怎么用python处理word和excel_用python操作word excel
  10. 阿里中台变“厚”,企业中台路在何方?