使用ThreadPool进行应用程序范围的日志记录

时间:2010-10-18 13:41:21

标签: multithreading logging threadpool

作为this question的后续讨论,讨论ThreadPool与专用线程的使用:

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

2 个答案:

答案 0 :(得分:0)

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

如果日志记录是关键任务的(例如,您可能需要根据日志重放最近的流量),那么专用线程更可能是正确的方法。

如果日志记录是“尽力而为”,那么ThreadPool可能会受到应用程序所需性能和延迟的其他限制。记录器的异步I / O在这里没问题。由于您建议较低的优先级为您的推定记录器线程,这可能与您的应用程序的配置文件匹配。

如果ThreadPool上发生了更多关键工作,那么我不会将其重载以进行日志记录,尤其是。如果日志本身很重要 - 您可能正在执行同步,刷新I / O以写出日志,这可能是瓶颈,具体取决于您希望记录的内容量。

答案 1 :(得分:0)

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

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