求助,关于 Linux 异步写的疑惑

2014-08-14 23:17:42 +08:00
 tb4649120073rs
现在,我们团队希望能实现把写日志这个动作使用异步写的方式,最好能在磁盘IO很繁忙的时候也不阻塞工作进程的执行。
当前的实现是open打开文件后,用fcntl把标志位中添加FASYNC,然后直接使用write(fd,buf,size).但好像没什么效果。
我在网上找了不少资料,但是很乱,我看了很久也没弄懂怎么回事,求各位大神指点迷津,谢谢各位。
3361 次点击
所在节点    问与答
5 条回复
phuslu
2014-08-14 23:27:19 +08:00
libeio
ggarlic
2014-08-14 23:38:37 +08:00
你的意思是直接写磁盘文件么?

如果是的话,此文件非彼文件
FASYNC是作用在设备文件上的,不是作用在磁盘上的普通文件上的。这类设置异步非阻塞的东东对磁盘文件几乎都没有效果的。
libeio+1
tb4649120073rs
2014-08-14 23:47:51 +08:00
@ggarlic 确实是指磁盘文件
而且,这样的实现导致了很诡异的现象
但磁盘很繁忙时,工作进程出现被hang住500ms的情况发生
此前实时写的版本就没出现过这样的情况
tb4649120073rs
2014-08-15 10:25:30 +08:00
大家在工作中有没有遇到过这样的需求?
libeio有没有已知的坑?
RemRain
2014-08-15 12:55:27 +08:00
linux的异步IO都是单独创建线程去写,AIO和其他的库都是。推荐上kafka或者redis,日志单独处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127962

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX