码迷,mamicode.com
首页 > 其他好文 > 详细

lua中实现异步资源读写

时间:2014-07-10 12:54:53      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:android   java   使用   文件   os   问题   

同样还是更新方面的需求,当我们检测到版本是新安装的以后,要进行upd目录清除。如果使用os.execute执行 rm -rf ooxx 是非常快的
但由于os.execute一旦报错,那整个lua进程就杯具了。于是,我们最后换成了lfs来进行目录遍历并逐个删除。
这样一来,文件数目如果过多,会等很久。于是想到使用异步的方式来处理。

一开始我尝试了lua的协程,我以为他和golang等语言中的一样。可以实现轻量级线程。
于是我做了一个简单的测试

h = coroutine.creat( function() for i=0,100000 do print("hahahahahaha") end end )
coroutine.resume(h)
print("oh yeah,i am here")

按我的期望是,最后这句话会在一堆hahahahaha中出现。 而实际上,是要等所有的hahahahaha打印完了,才出现。
协程看来不是我想像中的那货。

那又怎么办呢,引入线程? 刚刚返回的h就是一个thread
看来在lua中使用线程行不同,那如果用c++实现一个异步的等效函数,并提供一个监听呢。这样无疑是很ok的。
从唐门世界的更新模块中我发现它就是用java和oc分别实现的android和ios

这样下去,走太远了。
我们回过头来看看,我们之所以面临这个问题是因为,为了累加更新,我们的文件很小,没有打包。
基于这个特性我们可以想到,我们的单个文件删除的开销是极小的。
于是,我们可以采用如下技巧

遍历出所有要删除的文件放入一个table

在onEnterFRame中,一次处理一定数目的文件,直到全部处理完。


这个技巧对单个文件不大的项目非常有效,这个技巧源自我们公司的关卡pre loading方案。 避免了线程问题,同时又使得图形有机会渲染,保证了进度条的更新和防止画面假死。

此技巧在目前公司所有项目中都有使用,大家不用再纠结可行性了,大胆尝试吧。

lua中实现异步资源读写,布布扣,bubuko.com

lua中实现异步资源读写

标签:android   java   使用   文件   os   问题   

原文地址:http://www.cnblogs.com/geniusalex/p/3811890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!