tb4649120073rs
V2EX  ›  问与答

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

  •  1
     
  •   tb4649120073rs · Aug 14, 2014 · 4651 views
    This topic created in 4471 days ago, the information mentioned may be changed or developed.
    现在,我们团队希望能实现把写日志这个动作使用异步写的方式,最好能在磁盘IO很繁忙的时候也不阻塞工作进程的执行。
    当前的实现是open打开文件后,用fcntl把标志位中添加FASYNC,然后直接使用write(fd,buf,size).但好像没什么效果。
    我在网上找了不少资料,但是很乱,我看了很久也没弄懂怎么回事,求各位大神指点迷津,谢谢各位。
    5 replies  •  2014-08-15 12:55:27 +08:00
    phuslu
    phuslu
    Aug 14, 2014
    1
    libeio
    ggarlic
    ggarlic
    Aug 14, 2014❤️1
    2
    你的意思是直接写磁盘文件么?

    如果是的话,此文件非彼文件
    FASYNC是作用在设备文件上的,不是作用在磁盘上的普通文件上的。这类设置异步非阻塞的东东对磁盘文件几乎都没有效果的。
    libeio+1
    tb4649120073rs
    tb4649120073rs
    OP
    Aug 14, 2014
    3
    @ggarlic 确实是指磁盘文件
    而且,这样的实现导致了很诡异的现象
    但磁盘很繁忙时,工作进程出现被hang住500ms的情况发生
    此前实时写的版本就没出现过这样的情况
    tb4649120073rs
    tb4649120073rs
    OP
    Aug 15, 2014
    4
    大家在工作中有没有遇到过这样的需求?
    libeio有没有已知的坑?
    RemRain
    RemRain
    Aug 15, 2014
    5
    linux的异步IO都是单独创建线程去写,AIO和其他的库都是。推荐上kafka或者redis,日志单独处理
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3697 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:47 · PVG 17:47 · LAX 01:47 · JFK 04:47
    ♥ Do have faith in what you're doing.