skynet

Skynet 服务创建流程

非 Y 不嫁゛ 提交于 2019-11-30 05:46:14
Skynet 服务创建流程 根据设计综述 Skynet 是为了让服务器充分利用多核优势,将不同的业务放在独立的执行环境中处理。 Skynet 核心功能是加载一个 C 模块(动态库),模块用数字 id 标识,作为其 handle ,模块被称为服务 service 。服务间可以自由发送消息。每个模块可以向 Skynet 框架注册一个 callback 函数,用来接收发给它的消息。 每个服务是被一个个消息驱动,当无消息时,服务处于挂起状态。每个服务拥有一个属于自己的消息队列,框架中存在一个全局队列负责调度处理服务所接收到的消息。 代码层面,Skynet 服务对应于数据结构 struct skynet_context ,其中重要字段如下。 struct skynet_context { void * instance; // 模块自定义数据 struct skynet_module * mod; // 框架模块数据 void * cb_ud; // 传给回调函数的自定义数据 skynet_cb cb; // 回调函数 struct message_queue * queue; // 消息队列,用于接收发送给服务的消息 }; 函数 skynet_context_new 用于创建服务,返回值表示此服务。 // 参数 name: 服务名 // 参数 param: 传递给服务的参数 struct

浅谈消息队列

天大地大妈咪最大 提交于 2019-11-27 02:50:34
1.写在前面 本来一年前的时候还打算以那篇面经为契机,开始自己写博客的习惯,结果后来一拖再拖,虽然evernote里面积攒了不少东西,但是发现想整理成博客真的是太累了,毕设的时候觉得累没整理,刚到公司做mini项目觉得累没整理,后来刚进工作室熟悉环境觉得累没整理,不知不觉就一年没写博客了,囧。 为什么想起来写这样一篇文章呢?其实主要还是两周前有一个知乎问题突然火起来了,传说中的 水货程序员之问 。这篇知乎问题真是一个大宝库,刚一出来,海量平时在知乎上各种高调的大神(棍)和海量低调的真大神都出来冒泡,让我们这些弱菜开了眼界。水货程序员之问是个好问题,问题不是说好在水货程序员这篇文章到底黑的对不对准不准,而是印发的讨论像钓鱼一样钓出了一水儿神棍。 那怎么区别神棍和大神呢?方法很简单,我们一个一个浏览答案,从高票到低票,哪个答案或者跟着的评论里屁代码没有,还说的煞有介事的,一般都是神棍;哪个答案全程干货,各种分析,那就是大神。 举个比较简单的例子,某高票答案「妄议」了下云风,说后者解决问题的路子太野大家学不来,并且推荐了一票路子「不野」的大神(?)。我们不管这些大神(?)之前的知乎回答质量如何,但是我们从这个水货程序员之问里可以发现,这一票路子不野的大神(?)没有一个是来抖干货的,全是来玩SNS的。人家原po说云风的消息队列写的不行,那你们这些大神(?)既然来「妄议」了