??为了让我们第一时间知道程序的运行状态 core2程序在启动时,IWebHostBuilder CreateDefaultBuilder(args) 方法中会为我们注册一些默认服务这其中就包含默认的日志输出服务[]:
core2 已经将扩展插件统统挪到 [] 仓库下,包含了所有 rmation);
??以上代码解释了为何在并发情况下控制台日志输出会导致性能降低的原因:
该类中有一个BlockingCollection<> 阻塞队列,最大长度1024用于實现日志输出的生产消费模型,再看 EnqueueMessage()方法如果阻塞队列中已经达到1024条日志,则所有生产者将被阻塞也就是说:一旦日志生产速度远远夶于队列消费速度,生产者将会集中等待队列消费后才能竞争入队后返回引发了性能瓶颈
??到此,终于弄清楚之前的性能测试为何会受日志控制台输出的影响对底层代码的分析,会加深对此类问题的理解不但对之后排查类似问题有帮助,也让我们对生产消费模型场景有了更深的理解
??笔者此次对日志相关源码还做了更多深入的阅读,同时依照 core2
相关的设计思想以及代码实现,对于理解整体框架有极大的帮助笔者后续也会继续阅读其他相关源码。对于目前在使用.Net core2 的同学希望你同我一样,对了解事务的本质保持好奇心持の以恒!