我有一个现有的应用程序,其中多个线程通过一个outputstream编写(并在其上同步)。我想知道切换到单一编写器原则以写入输出流是否会更有效(我只是出于学术原因这样做,因为我不相信这会严重影响应用程序性能,尽管我可能错了)。就目前而言,我只在考虑使用阻塞队列或环形缓冲区供所有当前写入器写入,并使用一个写入器线程(队列/环形缓冲区使用)写入输出流/通道。
任何对此的想法或有用的建议都将受到欢迎。
最佳答案
如果系统上有足够的可用容量(空闲CPU时间,可用IO时间),则添加单独的线程仅执行日志IO将显着提高整个系统的性能。
从java.util.concurrent
包中添加一个队列,并添加一堆添加到队列中的线程,并从该队列中读取并写出输出的日志记录线程将是一个很好的解决方案。
另一方面,如果您具有充分利用的系统,则队列将变得太大,或者开销将变得明显,并且日志线程的好处将变得微不足道。
在大多数情况下,我看到一个单独的日志记录线程是有益的。