c/c++ |游戏后端开发之skynet

作者眼中的skynet
有一点要说明的是,云风至始也没有公开说skynet专门为游戏开发,换句话,skynet 引擎也可以用于web 开发

贴贴我的笔记

skynet 核心解决什么问题

愿景:游戏服务器能够充分利用多核优势,将不同的业务放在独立的执行环境中处理,协同工作。

解决心路:最开始想的是利用OS的进程解决,后来发现必须要采用嵌入式语言(lua),独立OS进程意义不太大

Lua State 提供了良好的沙盒,隔离不同执行环境。
多线程模式,可以使得状态共享、数据交换更佳高效。

当然多线程的弊端也很明显,如复杂的线程锁、线程调度问题。当然这些问题可以通过见效底层的规模,精简设计,最终把危害限制再很小的范围。这一点,skynet最终花了不到3000行c代码来水岸核心层的代码。

记得在候捷的书中,这样讲过,并发问题后于c/c++的

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

Skynet 提供了名字服务,还可以给特定的服务起一个易读的名字,而不是用id 来代替它。id 和 运行时态相关,无法保证每次启动服务都有一只的id,但是名字可以。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关推荐

  1. 游戏开发初体验(一)

    2024-04-14 13:56:03       10 阅读
  2. 游戏客户开发

    2024-04-14 13:56:03       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 13:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 13:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 13:56:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 13:56:03       20 阅读

热门阅读

  1. RocketMQ笔记(九)SpringBoot整合RocketMQ消息过滤

    2024-04-14 13:56:03       17 阅读
  2. wpf 模板内TemplateBinding绑定失效的问题

    2024-04-14 13:56:03       15 阅读
  3. 代码随想录训练营19day-回溯1

    2024-04-14 13:56:03       13 阅读
  4. RT-thread系统动态内存堆和内存池的使用

    2024-04-14 13:56:03       21 阅读
  5. c# InvokeRequested delegate解决线程访问界面

    2024-04-14 13:56:03       17 阅读
  6. Mybites一对多collection

    2024-04-14 13:56:03       15 阅读
  7. 06篇 Linux命令练习

    2024-04-14 13:56:03       15 阅读
  8. 开关门c++

    2024-04-14 13:56:03       15 阅读
  9. 逐步学习Go-Slice(切片还可以多挖一下)

    2024-04-14 13:56:03       15 阅读
  10. `/bin/bash`、`sh` 或者直接./的区别

    2024-04-14 13:56:03       19 阅读
  11. js如何实现修改URL参数并不刷新页面

    2024-04-14 13:56:03       14 阅读