代码之家  ›  专栏  ›  技术社区  ›  bitbonk

使用线程池进行应用程序范围的日志记录?

  •  0
  • bitbonk  · 技术社区  · 14 年前

    作为后续 this question

    何时使用专用线程(优先级较低)进行应用程序范围的日志记录,何时使用线程池?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Steve Townsend    14 年前

    我要做的是完全依赖于我的应用程序及其日志组件的要求。

    如果日志记录是“最大的努力”,那么ThreadPool就可以满足对应用程序所需性能和延迟的其他限制。在这里,记录器的异步I/O就可以了。由于您建议降低假定日志线程的优先级,这可能与应用程序的配置文件匹配。

    如果线程池上发生了更关键的工作,那么我不会重载它来进行日志记录,特别是如果日志记录本身很重要的话—您很可能正在执行同步的、刷新的I/O以写出日志,这可能是一个瓶颈,具体取决于您要记录的内容的数量。

        2
  •  0
  •   Samuel Neff    14 年前

    如果日志记录不是关键的,并且您希望异步进行,那么我建议使用单个后台线程进行日志记录,并使用生产者/消费者队列发送日志消息。与线程池相比,这可以提高性能,因为只有一个线程在不太重要的日志上执行I/O,这就不太可能在其他线程上阻止更高优先级的I/O。

    您还可以使用此机制确保在记录之前提交关键日志。将它们添加到队列中,然后有一种机制等待特定消息提交。