rbatis/fast_log

考虑支持 tokio 和 async-std ?

kuyoonjo opened this issue · 5 comments

看到这里使用的是 may 这个运行库。有没有考虑支持 tokio 和 async-std 呢?

看到这里使用的是 may 这个运行库。有没有考虑支持 tokio 和 async-std 呢?

由于fast_log 使用异步库只处理 通道接受日志,并处理后续Appender的IO事件(打印日志,发送日志到网络IO....)等等,
实际测试在协程量较少情况下,may 相比tokio协程切换更积极,同时开销小于传统线程。因此目前选择它做为支持的异步库。

更换tokio(而且是建立在使用tokio的单线程Runtime 模拟Actor运行时)诚然能提高稍多的并发,但是代价是单协程的延迟增高。但是我们打印日志基本都是不超过5条协程在工作。

保持简单,高性能即可

因为这边使用很多东西包括 Web 服务 rweb 都是基于 tokio 的。换 runtime 不实际。这个库也是可以正常用的。只是担心同时跑两个 runtimes 会不会有问题呢?

因为这边使用很多东西包括 Web 服务 rweb 都是基于 tokio 的。换 runtime 不实际。这个库也是可以正常用的。只是担心同时跑两个 runtimes 会不会有问题呢?

不影响你的。

实际上还是有影响的呢。我的机子是 8 核 8 线程的。运行只有 tokio 的程序有 9 全线程。加上这个库后变成 20 个线程了呢。

clee-test $ ps -ax|grep hello-tokio
45652 ttys005    0:00.04 target/debug/hello-tokio
45760 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox hello-tokio
clee-test $ ps -M 45652
USER   PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
yu   45652 s005    0.0 S    31T   0:00.01   0:00.01 target/debug/hello-tokio
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00

下面是没有启用 Log 的。

clee-test $ ps -ax|grep hello-tokio
46095 ttys005    0:00.02 target/debug/hello-tokio
46122 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox hello-tokio
clee-test $ ps -M 46095
USER   PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
yu   46095 s005    0.0 S    31T   0:00.01   0:00.00 target/debug/hello-tokio
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00

实际上还是有影响的呢。我的机子是 8 核 8 线程的。运行只有 tokio 的程序有 9 全线程。加上这个库后变成 20 个线程了呢。

clee-test $ ps -ax|grep hello-tokio
45652 ttys005    0:00.04 target/debug/hello-tokio
45760 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox hello-tokio
clee-test $ ps -M 45652
USER   PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
yu   45652 s005    0.0 S    31T   0:00.01   0:00.01 target/debug/hello-tokio
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00
     45652         0.0 S    31T   0:00.00   0:00.00

下面是没有启用 Log 的。

clee-test $ ps -ax|grep hello-tokio
46095 ttys005    0:00.02 target/debug/hello-tokio
46122 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox hello-tokio
clee-test $ ps -M 46095
USER   PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
yu   46095 s005    0.0 S    31T   0:00.01   0:00.00 target/debug/hello-tokio
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00
     46095         0.0 S    31T   0:00.00   0:00.00

may默认是cpu*2线程,你可以设置它为2线程(至少)。
may::config().set_workers(2);