用一个编写器线程替换多个线程写入outputstream(Java)

时间:2013-10-31 22:00:52

标签: java multithreading

我有一个现有的应用程序,其中多个线程通过输出流写入(并在其上进行同步)。我想知道是否切换到单个写入原则来写入输出流可能更有效(我只是出于学术原因这样做,因为我不相信这会影响应用程序性能,尽管我可能是错的)。现在,我只考虑使用阻塞队列或环形缓冲区为所有当前写入程序写入,并使用一个写入程序线程(队列/环形缓冲区的使用者)写入输出流/通道。
对此或有用建议的任何想法都会非常受欢迎。

1 个答案:

答案 0 :(得分:1)

如果您的系统有足够的可用容量(空闲CPU时间,可用IO时间),那么添加一个单独的线程来执行日志记录IO只会显着提高整个系统的性能。

java.util.concurrent包中添加一个队列,其中包含一堆添加到队列中的线程,以及从队列中读取并写出输出的日志记录线程将是一个很好的解决方案。

另一方面,如果你有一个完全利用的系统,那么队列将变得太大,或者开销将变得明显,并且日志记录线程的好处将变得可以忽略不计。

在大多数情况下,我看到一个单独的日志记录线程是有益的。