V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tb4649120073rs
V2EX  ›  问与答

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

  •  1
     
  •   tb4649120073rs · 2014-08-14 23:17:42 +08:00 · 3332 次点击
    这是一个创建于 3752 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在,我们团队希望能实现把写日志这个动作使用异步写的方式,最好能在磁盘IO很繁忙的时候也不阻塞工作进程的执行。
    当前的实现是open打开文件后,用fcntl把标志位中添加FASYNC,然后直接使用write(fd,buf,size).但好像没什么效果。
    我在网上找了不少资料,但是很乱,我看了很久也没弄懂怎么回事,求各位大神指点迷津,谢谢各位。
    5 条回复    2014-08-15 12:55:27 +08:00
    phuslu
        1
    phuslu  
       2014-08-14 23:27:19 +08:00
    libeio
    ggarlic
        2
    ggarlic  
       2014-08-14 23:38:37 +08:00   ❤️ 1
    你的意思是直接写磁盘文件么?

    如果是的话,此文件非彼文件
    FASYNC是作用在设备文件上的,不是作用在磁盘上的普通文件上的。这类设置异步非阻塞的东东对磁盘文件几乎都没有效果的。
    libeio+1
    tb4649120073rs
        3
    tb4649120073rs  
    OP
       2014-08-14 23:47:51 +08:00
    @ggarlic 确实是指磁盘文件
    而且,这样的实现导致了很诡异的现象
    但磁盘很繁忙时,工作进程出现被hang住500ms的情况发生
    此前实时写的版本就没出现过这样的情况
    tb4649120073rs
        4
    tb4649120073rs  
    OP
       2014-08-15 10:25:30 +08:00
    大家在工作中有没有遇到过这样的需求?
    libeio有没有已知的坑?
    RemRain
        5
    RemRain  
       2014-08-15 12:55:27 +08:00
    linux的异步IO都是单独创建线程去写,AIO和其他的库都是。推荐上kafka或者redis,日志单独处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:19 · PVG 17:19 · LAX 01:19 · JFK 04:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.