
lua程序设计电子书 chm[炫彩版 2009-2-12更新]
>
翻译由>
PS:也有PDF的,自己搜索吧
coroutine 英[kəru:'ti:n] 美[kəru:'ti:n]
n 协同程序;
[网络] 协同常式; 协同例程; 联立程序;
[例句]The thing to notice about this wrapper is that each generator/ coroutine yields a tuple that contains its intended branch destination
关于这个包装器要注意的一点是,每个生成器/协同程序都会生成一个包含它的预期分支目标的元组。
[其他] 形近词: microroutine superroutine macroroutine
coroutine基础
Lua所支持的协程全称被称作协同式多线程(collaborative multithreading)。Lua为每个coroutine提供一个独立的运行线路。然而和多线程不同的地方就是,coroutine只有在显式调用yield函数后才被挂起,同一时间内只有一个协程正在运行。
Lua将它的协程函数都放进了coroutine这个表里,其中主要的函数如下
>
详细看上面网址。
,谢谢!
Fibers 又称纤程,可以理解为协同程序,类似py和lua都有这样的模型。使用Fibers可以避免对资源的互抢,减少cpu和内存的消耗,但是Fibers并不能够真正的并行执行,同一时刻只有一个Fibers在执行,如果在其中一个Fibers中执行过多的cpu *** 作或者写了个死循环,则整个主程序将卡死住。node中的异步事件循环模型就有点象这个。
Threads 又称线程,他可以在同一时刻并行的执行,他们共享主进程的内存,在其中某一时刻某一个threads锁死了,是不会影响主线程以及其他线程的执行。但是为了实现这个模型,我们不得不消耗更多的内存和cpu为线程切换的开销,同时也存在可能多个线程对同一内存单元进行读写而造成程序崩溃的问题。
很多让node支持多线程的方法是使用c/c++的addon来实现,在需要进行cpu密集型计算的地方,把js代码改写成c/c++代码,但是如果开发人员对c++不是很熟悉,一来开发效率会降低不少,二来也容易出bug,而且我们知道在addon中的c++代码除了编译出错外,是很难调试的,毕竟没有vs调试c++代码方便。
令人振奋的消息,我们为什么不让node也支持多线程模型呢?于是Jorge为我们开发出了一个让node支持多线程模型的模块:threads_a_gogo
github地址:>
forward shading 和 deferred shading详解
ngui的性能优化方案
可交互植被 时间问题
详解网络通信框架
解释udp tcp
物理引擎
骨骼动画的原理 顶点索引在哪些文件里
assetbundle打包解决方案
解释渲染管线
光照计算在什么时候进行?
lua有没有使用过?
command buffer的使用
协同程序(Coroutine):
三个状态:suspended(挂起,协同刚创建完成时或者yield之后)、running(运行)、dead(函数走完后的状态,这时候不能再重新resume)。
coroutinecreate(arg):根据一个函数创建一个协同程序,参数为一个函数
coroutineresume(co):使协同从挂起变为运行(1)激活coroutine,也就是让协程函数开始运行;(2)唤醒yield,使挂起的协同接着上次的地方继续运行。该函数可以传入参数
coroutinestatus(co):查看协同状态
coroutineyield():使正在运行的协同挂起,可以传入参数
resume函数的两种用途虽然都是使协同挂起,但还是有些许差异的,看下面这个例子:
参数是做什么用的?
co1 = coroutinecreate(function () print("随机数为偶数,运行co1") end)
co2 = coroutinecreate(function () print("随机数为奇数,运行co2") end)
mathrandomseed(ostime())
a = mathrandom(0,9)
print("a=" a)
if a%2 == 0 then
coroutineresume(co1)
else
coroutineresume(co2)
end
结果:
a = 5
随机数为奇数,运行co2
coroutine 英[kəru:'ti:n] 美[kəru:'ti:n] n 协同程序; [网络] 协同常式; 协同例程; 联立程序; [例句]The thing to notice about this wrapper is that each generator/ coroutine yields a tuple that contains its intended branch
以上就是关于求《Lua程序设计(第2版)》中文版 电子书全部的内容,包括:求《Lua程序设计(第2版)》中文版 电子书、怎么理解coroutine、如何用node.js模拟多线程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)