Java I/O线程的直接切换或阻塞队列?
如果我有一个使用Java I/O线程的直接切换或阻塞队列?,java,multithreading,performance,io,buffer,Java,Multithreading,Performance,Io,Buffer,如果我有一个使用FileChannel的I/O线程,我应该有一个方法来获取一个值,填充一个缓冲区并将其写入磁盘,还是应该有一个带缓存的有界队列来将块写入磁盘 这些值非常小,而且会有很多,因此从性能角度来看,我是否应该为FileChannel制作一个包装器,使其类似于BufferedWriter?还是直接切换和写入可以 如果我有一个使用FileChannel的I/O线程,我应该有一个接受值、填充缓冲区并将其写入磁盘的方法,还是应该有一个带缓存的有界队列,将块写入磁盘 稍微取决于应用程序的特性。如果
FileChannel
的I/O线程,我应该有一个方法来获取一个值,填充一个缓冲区并将其写入磁盘,还是应该有一个带缓存的有界队列来将块写入磁盘
这些值非常小,而且会有很多,因此从性能角度来看,我是否应该为FileChannel
制作一个包装器,使其类似于BufferedWriter
?还是直接切换和写入可以
如果我有一个使用FileChannel的I/O线程,我应该有一个接受值、填充缓冲区并将其写入磁盘的方法,还是应该有一个带缓存的有界队列,将块写入磁盘
稍微取决于应用程序的特性。如果您正在对信息进行某些处理,那么您可能会受到处理器的限制,因此在从有限制的阻塞队列
消费的同时,分叉一个线程来只对文件通道
执行IO将是一个好主意。但CPU速度仍然大大超过IO,因此多线程的复杂性可能不是一个明显的胜利
如果确实使用了阻塞队列
,请确保限制其大小,否则,如果生产者的生成速度比写入者快,则可能会填满内存
这些值非常小,而且会有很多,所以从性能的角度来看,我是否应该为FileChannel制作一个包装器,使其类似于BufferedWriter
对。考虑到每个值都很小,因此为每个FileChannel
IO操作编写一个值将非常昂贵。缓冲一些值,然后将它们作为一个块写入,这会使性能得到很好的提高。当然值得编写缓冲区并对其进行测试