Skynet协同模型
来源:互联网 发布:mac 连接云服务器 编辑:程序博客网 时间:2024/06/06 04:02
源文件:lualib/skynet.lua
skynet中对协同程序的应用
一、启动
//1. skynet.start(start_func)function skynet.start(start_func)c.callback(dispatch_message) // 注册回调函数skynet.timeout(0, function()// 提交msg给线程执行(被执行时,会调用上一步注册的回调函数(dispatch_message)执行)init_service(start_func)// 需被执行函数end)end//2. skynet.timeout(ti, func)function skynet.timeout(ti, func)local session = c.command("TIMEOUT", tostring(ti)) // 每次调用都分配一个新的session(不重复) 并调用线程执行local co = co_create(func)// 创建新的协同程序session_id_coroutine[session] = co// 存储session的coend//3. co_create(f)function co_create(f)...co = coroutine.create(function(...)f(...)// 先执行一次while true do-- 循环执行f = nil// nilcoroutine_pool[#coroutine_pool+1] = co// 加入线程池f = coroutine_yield "EXIT"// 阻塞(一个方法执行结束,等待下一个方法)f(coroutine_yield())// 执行下一个方法(疑问)endend)...end
二、执行
//1. dispatch_message(...)function dispatch_message(...)local succ, err = pcall(raw_dispatch_message, ...)...end//2. raw_dispatch_messagefunction raw_dispatch_message(prototype, msg, sz, session, source, ...)if prototype == 1 thenlocal co = session_id_coroutine[session]if co == "BREAK" thensession_id_coroutine[session] = nilelseif co == nil thenunknown_response(session, source, msg, sz)else session_id_coroutine[session] = nil // 清空此session的线程suspend(co, coroutine.resume(co, true, msg, sz))// 调用coroutine.resume(co, true, msg, sz)调用co_create主函数endelse...enend3. co_createco = coroutine.create(function(...)f(...)// 第一次执行用init_service(start_func)while true do// 循环执行f = nil// nilcoroutine_pool[#coroutine_pool+1] = co// 加入线程池f = coroutine_yield "EXIT"// 阻塞(一个方法执行结束,等待下一个方法) 至此为止 完成了第一次的协同调用f(coroutine_yield())// 执行下一个方法endend)
0 0
- Skynet协同模型
- Skynet网络模型
- skynet
- Skynet
- skynet
- git原理图及git协同模型
- 基于用户的协同过滤推荐模型
- 协同
- skynet example
- skynet浅析
- skynet浅析
- skynet编译
- skynet特性
- skynet浅析
- Skynet 开源
- skynet socketserver
- skynet gateserver
- skynet笔记
- UVaOJ 694 - The Collatz Sequence
- Mysql导入数据库及表结构和数据在cmd中
- 为什么以太网最小帧长为64字节
- C++学习总结——类和对象、构造函数和拷贝构造函数
- 程序员为什么要加班
- Skynet协同模型
- 关于c语言链表的操作
- javascript笔记-----------js闭包
- googiehost免费空间申请
- 中国特色程序员的「钱途」
- 补码加、减运算规则【转载】
- 关于JS与OC交互的简单总结
- linux解压缩命令
- C/C++内存划分