java在单核cpu下的多线程处理文件能否提高效率?

徐航 发布于 2015/11/25 16:12
阅读 854
收藏 0

http://tutorials.jenkov.com/java-concurrency/benefits.html

这个页面讲到一个例子,处理A、B两个文件,读取分别要5秒,处理分别要2秒。如果只用一个线程处理需要14秒。


5 seconds reading file A
  2 seconds processing file A
  5 seconds reading file B
  2 seconds processing file B
-----------------------
 14 seconds total


如果先读取一个文件A,处理A的同时另一个线程读取文件B,然后处理B。需要12秒。

5 seconds reading file A
  5 seconds reading file B + 2 seconds processing file A
  2 seconds processing file B
-----------------------
 12 seconds total
下面多线程的处理方式在单个(单核)cpu的机器上能实现吗,多谢了?

(因为记得好像是在读取文件的过程中是不需要cpu资源的,所以在处理A的同时读取B也进行了2秒。我觉得上面是可以实现的,但是不知道有没有记错,不太确定。)



加载中
0
NickWilde
NickWilde
这个吧,尝试复用IO吧,将文件IO设置为非阻塞的然后加到复用方法中去,可能可以解决读阻塞的问题,多线程也行,读阻塞了会自动切换到另外线程。
0
xpbob
xpbob
好像是因为dma,cpu分配资源之后,不用管读取了,用多线程可以,不过是并发,不是并行
xpbob
xpbob
@徐航 并行是同一时刻在执行,并发是伪并行,是看时间段的,一般说的是cpu的调度,但是你说的那种情况,用多线程后传输和下次调度是同时执行的,只是大家都在说调度,你的思考点不一样
徐航
徐航
谢谢指正。请问在CPU分配资源后,DMA传输和CPU处理为什么不能并行?
0
insights
insights
文件处理(日志)单CPU多线程会降低性能. 
返回顶部
顶部