单块硬盘上同时并行存取两个文件是不可以的,但是可以通过组RAID/带区卷或跨区卷等方式来实现在多块硬盘上的并行存取。
RAID0、RAID5等的原理是将一个文件分布在多块硬盘上,读写时,多块硬盘并行存取,可以大大提高对这个文件的读写速率,当然,仍然不是同时读写多个文件,而是加快每个文件的读写速度。
(RAID5或更高级别的RAID某些情况下可同时存取两个以上文件)拆磨好
跨区卷是直接把多块硬盘合并成一个单一的大分区,如果两个文件位于该逻辑分区的不同物理硬盘上,则可以同时存取。
SCSI、SATA2的NCQ等技术都会主动阻止对单块硬盘两个或以上文件的同时读写,即使有两个进程同时请求读写,也会把它们的读写请求排队整理,尽可能减少磁头的来回摆动。
比如读写请求是1212121231212,可能会被重新排列为1112221112223
队列技术游衡可以提高磁盘的持续存取性能(吞吐量),因此广泛应用于访问密集型服务旅铅器环境;但是副作用是可能降低随机读取性能(突发访问时间变长),例如上例中的3号文件读取请求就被延后了。
.
FttpAdapter fa = new FttpAdapter("fttp://10.232.20.151/home/log/1.log")Result rs = fa.getFttpReader().tryReadAll()调用tryReadAll会立即返回一个Result,但是不能马上获取到结果值,需要轮循检查它的状态是否就绪
rs.getStatus()有三种状态:
Result.NOTREADY 未就绪
Result.READY 就绪
Result.EXCEPTION 异常轮循直到状态准备就绪:
while(rs.getStatus()==Result.NOTREADY)状态就绪就可以通过getResult()获取到读取结果:
byte[] bts = rs.getResult()可以对一个远程文件的不同部分同改高时并行读写,也可以对多个远程文件同时并行读写,比如:
String fttppath = "fttp://10.232.20.151/home/log/1.log"
FttpAdapter fa0 = new FttpAdapter(fttppath)
FttpAdapter fa1 = new FttpAdapter(fttppath)
FttpAdapter fa2 = new FttpAdapter(fttppath)
Result rs0 = fa0.getFttpReader(0,5).tryReadAll()
Result rs1 = fa1.getFttpReader(5,5).tryReadAll()
Result rs2 = fa2.getFttpReader(10,5).tryReadAll()
上面表示3个同时核早尺并行的读睁念取,分别的从一个文件的0,5,10位置向后读5个字节。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)