2017年4月10日

skynet源码阅读<5>--协程调度模型

摘要: 注:为方便理解,本文贴出的代码部分经过了缩减或展开,与实际skynet代码可能会有所出入。 作为一个skynet actor,在启动脚本被加载的过程中,总是要调用skynet.start和skynet.dispatch的,前者在skynet-os中做一些初始化工作,设置消息的Lua回调,后者则注册针 阅读全文

posted @ 2017-04-10 18:30 莫行 阅读(3551) 评论(1) 推荐(0) 编辑

2017年4月3日

unity-Fatal Error GC-GetThreadContext Failed

摘要: 这几次在使用unity5.3打windows包后,运行x.exe不久总是会弹出"fatal error GC: GetThreadContext Failed"的错误。到网上查了,各种说法都有。我干脆换了unity5.6版本,但是问题依然存在。有贴子说这个并非unity的bug,而是跟杀毒软件的信任 阅读全文

posted @ 2017-04-03 17:04 莫行 阅读(2427) 评论(0) 推荐(0) 编辑

2017年3月17日

skynet源码阅读<4>--定时器实现

摘要: 昨天和三石公聊天,他提到timer的实现原理,我当时迟疑了一下,心想timer不是系统底层时钟中断驱动上层进程/线程,累积计时实现的么?他简述了timer的实现,什么堆排序,优先级队列等,与我想象的不同。正好这两天在作skynet笔记,以前也没有留意过skynet的timer,这次干脆就看看它是怎么 阅读全文

posted @ 2017-03-17 09:07 莫行 阅读(1142) 评论(0) 推荐(1) 编辑

2017年3月15日

FPU同步(翻译)

摘要: 本篇翻译的原英文在:http://mauve.mizuumi.net/2013/06/16/desyncs-and-fpu-synchronization/#more-725(可能要FQ) 如果你曾经处理过跨系统的同步问题的话,那么碰到不同步的问题也就见怪不怪了。其中的一些是比较容易处理的,但是另外 阅读全文

posted @ 2017-03-15 17:28 莫行 阅读(247) 评论(0) 推荐(0) 编辑

2017年3月14日

skynet源码阅读<3>--网关分析

摘要: 继上一篇介绍了skynet的网络部分之后,这一篇以网关gate.lua为例,简单分析下其串接和处理流程。 在官方给出的范例中,是以examples/main.lua作为启动脚本的,在此过程中会创建watchdog服务: 首先加载watchdog.lua脚本。而在watchdog.lua的加载过程中, 阅读全文

posted @ 2017-03-14 17:43 莫行 阅读(4510) 评论(0) 推荐(0) 编辑

2017年3月13日

async-await原理解析

摘要: 在用async包裹的方法体中,可以使用await关键字以同步的方式编写异步调用的代码。那么它的内部实现原理是什么样的呢?我们是否可以自定义await以实现定制性的需求呢?先来看一个简单的例子: 通过ILSpy反编译(要关闭"视图-选项-反编译await/async"菜单项),得到如下代码: 按照代码 阅读全文

posted @ 2017-03-13 16:14 莫行 阅读(778) 评论(0) 推荐(0) 编辑

2017年3月1日

async-await系列翻译(一)

摘要: 本篇翻译的英文链接:https://docs.microsoft.com/en-us/dotnet/articles/standard/async-in-depth 使用.NET的基于任务的异步编程模型,可以直观地编写处理I/O密集型或是CPU计算密集型问题的异步代码。这个模型暴露了Task和Tas 阅读全文

posted @ 2017-03-01 09:57 莫行 阅读(1192) 评论(0) 推荐(0) 编辑

2017年2月22日

skynet源码阅读<2>--网络部分

摘要: 先来看下socket_server的数据结构,这里简称为ss: 我绘了一张简图,表述网络收发部分的处理流程,如下: 1)skynet启动时会创建单独的socket线程,在这个线程中,通过skynet-socket-poll轮循管道server-pipe。ss.sendctrl_fd是管道的写端,而s 阅读全文

posted @ 2017-02-22 14:44 莫行 阅读(802) 评论(0) 推荐(0) 编辑

2017年1月2日

BlueSea笔记<1>--Cricket初探

摘要: 最近在看Cricket这个实现了Actor模式的F#开源框架,对其工作方式作了一番探究。首先来看一段简单的例子代码: 先是定义了消息类型Say,接着通过computation-expression(计算表达式)的方式定义了greeter这个actor。actor计算表达式的定义见ActorConfi 阅读全文

posted @ 2017-01-02 09:46 莫行 阅读(331) 评论(0) 推荐(0) 编辑

2016年10月4日

skynet源码阅读<1>--lua与c的基本交互

摘要: 阅读skynet的lua-c交互部分代码时,可以看到如下处理: 那么,问题来了:skynet_context是如何作为upvalue与C函数绑定在一起的呢?这里以luaopen_skynet_core(lua_State *L)为例: 这里先通过luaL_newlibtable创建一张表T(函数指针 阅读全文

posted @ 2016-10-04 10:31 莫行 阅读(1832) 评论(0) 推荐(0) 编辑

导航