没有,呵呵,以前讨论过
我觉得用io库应该够用了,控制每次写入的块大小,不要一次写太多数据导致进程阻塞时间过长
On 5月25日, 上午10时10分, "boin - U know the Rules..." <mcfeeb...@gmail.com>
wrote:
> Thanks Pengqi,解惑了:)
>
> 那现在问题似乎已经进化成了寻找一个lua非阻塞的文件io方案,不知道大家有无推荐呢?
>
> 在 2012年5月25日 上午9:51,pengqi <fengm...@gmail.com>写道:
>
>
>
>
>
>
>
> > 调用os.execute实际上开销很大,而且可能会阻塞当前的worker,如果系统压力稍大,这样的做法实在不妥。最好采用lua的第3方库非阻塞的来做。
> > error log中的wait_pid failed在这种情况下是很正常的, os.execute实际上是调用c的system()函数,该函数实际上会fork一个进程来做shell,然后会阻塞式waitpid到这个子进程结束,当该子进程结束会给该worker发SIGCHLD,该worker对应的信号处理函数中会掉用waitpid来回收,但是实际上system()中已经显示的用waitpid回收掉了,所以该worker信号处理函数的waitpid回收会失败,所以在error
> > log中会写一条日志。
>
> > 在 2012年5月25日 上午8:58,Anfernee Gui <anfernee....@gmail.com>写道:
>
> > sorry, it's lua. ignore me.
>
> >> 2012/5/25 Anfernee Gui <anfernee....@gmail.com>
>
> >>> 不是很了解python,但你应该是说反了,应该是popen调用了exec家族。
>
> >>> - anfernee
>
> >>> 2012/5/25 Wendal Chen <wendal1...@gmail.com>
>
> >>>> 我也在使用类似的解决方法, 但你说的 " 不是特别稳定" ,我觉得只是os.execute执行得太快而已, 下一个周期到来的时候,
> >>>> 子进程已经执行完毕,所以wait pid failed
>
> >>>> 在 2012年5月25日 上午12:37,黄欢 <mcfeeb...@gmail.com>写道:
>
> >>>> hi all, 第一次提问,略腼腆 :)
>
> >>>>> 我正使用ngx+lua开发一个静态文件分发系统,有一个主要的功能就是向 upstream
> >>>>> 请求数据(tar包二进制流),然后解压在本地磁盘上作为cache,然后输出给访问者。
>
> >>>>> 测试了很多种方案,发现最快速方案居然是直接系统调用,实现代码类似如下:
>
> >>>>>> local buff = cloud.get(cachekey) --fetch sth. from upstream
>
> >>>>>> buff = ngx.decode_base64(ngx.unescape_uri(buff))
>
> >>>>>> local tmpath = os.tmpname()
>
> >>>>>> local file = io.open(tmpath, 'w')
>
> >>>>>> file:write(buff)
>
> >>>>>> io.close(file)
>
> >>>>>> -- expand cache
>
> >>>>>> os.exec(string.format("mkdir -p '%s'; tar xf '%s' -C '%s'",
> >>>>>>> file_base, tmpath, file_base))
>
> >>>>> os.exec 实际上使用了 popen() 做系统调用,感觉这样实现不是特别稳定(实际上也是,error_log中偶尔会有wait_pid
> >>>>> failed)
>
> >>>>> 向大家请教一下有没有更好的方法?
>
> >>>>> To English users, this post is asking a question about
> >>>>> the performance of file-system i/o in ngx_lua.
>
> >>>>> Thanks,
>
> >>>>> --
> >>>> Wendal Chen
> >>>> GuangDong China
>
> >>>> --
> >>> Best Regards,
> >>> Yongkun
>
> >> --
> >> Best Regards,
> >> Yongkun
>
> >> --
> > Jinglong
> > Software Engineer
> > Server Platforms Team at Taobao
>
> > e>