做实时数据库内核时,花了两天时间把之前同步逻辑改成异步,重点涉及到IO处理的方法,本以为性能会提升,因为微软官方文档专门就io异步方式和算法异步进行了说明。今天测试结果大跌眼镜,压缩写入文件的速度从10m/s下降到了3m/s,.net core3.0本身占用了93.48%CPU时间,其中仅异步调度就占用了20.35%,而我的业务逻辑只得到了可怜的6.52%,比同步模式下的21.8%降低了70%!
看来还是不能乱用异步,毕竟任务调度也是有代价的,某帖子说在50ms以上的(所谓的long run)活适合异步,比如网络通讯、数据库查询、ui操作、文件io等等。我的应用场景中,即便是io也是以kb为单位读写,时间不可能到50ms,因此用异步得不偿失。