如果我有一个使用FileChannel
的I / O线程,我应该有一个取值的方法,填充缓冲区并将其写入磁盘,还是应该有一个带缓存的有界队列而是将块写入磁盘?
值很小,而且会有很多这样的值,所以从性能的角度来看,我应该为FileChannel
制作一个包装器,使它与BufferedWriter
类似吗?或者直接切换并写好吗?
答案 0 :(得分:1)
如果我有一个使用FileChannel的I / O线程,我应该有一个取值的方法,填充缓冲区并将其写入磁盘,或者我应该有一个带有缓存的有界队列,该块将块写入磁盘反而?
取决于您的应用程序的特性。如果您正在对信息进行一些处理,那么您可能受到处理器限制,因此请求线程只对FileChannel
执行IO,而从有界BlockingQueue
消耗将是个好主意。但CPU速度仍然大大超过IO,因此多线程的复杂性可能不是一个明显的胜利。
如果您使用BlockingQueue
,请确保限制其大小,否则生产者可能会填写内存,如果它比作者生成得快。
值很小,而且会有很多这样的值,所以从性能的角度来看,我应该为FileChannel创建一个包装器,使其类似于BufferedWriter吗?
是。鉴于每个值都很小,每FileChannel
个IO操作写一个将是昂贵的。缓冲一些值,然后将它们写为块应该可以提高性能。当然值得写缓冲区并测试它。