AsynchronousFileChannel'i kullanmanın bir başka beklenmedik nedenine rastladım. Büyük dosyalar arasında rastgele kayıt yönelimli yazma işlemleri gerçekleştirirken (önbelleğe alma fiziksel belleği aşarak her şeye yardımcı olmaz), AsynchronousFileChannel'in normal bir FileChannel'e karşı tek iş parçacıklı modda iki kat fazla işlem gerçekleştirdiğini buluyorum.
En iyi tahminim, senkronize olmayan io Windows 7'de IO ile çakıştığından, NTFS dosya sistemi sürücüsünün, her aramadan sonra bir senkronizasyon noktası oluşturması gerekmediğinde kendi iç yapılarını daha hızlı güncelleyebilmesidir. .
Ben sonuçlar çok FileChannel yakın ve AsynchronousFileChannel performansının hala yarısı (nasıl performans göstereceğini görmek için RandomAccessFile karşı mikro benchmarked.
çok kanallı yazıyor ile ne emin değilim. Bu açık Bir SSD üzerinde Java 7 (SSD, manyetikten daha hızlı bir büyüklük sırasına ve bellekte bulunan daha küçük dosyalarda bir başka büyüklük sırasına göre daha hızlı bir sıralamadır.)
Aynı oranların Linux üzerinde olup olmadığını görmek ilginç olacaktır.
Teşekkürler ama verimlilik nedenleri hakkında daha fazla merak - I gerçekleştirirken neden göremiyorum/Ç Başka bir iş parçacığında yardımcı olur. Bir iş parçacığı her zaman G/Ç için engellenmelidir ve bildirilen bir kaynak yeniden kullanımı, donanım özellik kullanımı veya herhangi bir performans artırıcı davranış yoktur. –
Bunun avantajı, * iki iş parçacığına * ihtiyacınız olmamasıdır. Büyük bir veri bloğu yazıyorsanız, düşük düzeyde, disk denetleyicisi, tamamlama işleyicinizi çağırmak için yığına giden bir kesintiyi bildirmeden önce diske veri yazma işi yapar. İş parçacığınızın bu işlem sırasında engellenmesi gerekmez ve başka şeyler yapabilir. Bir daha az iş parçacığı kullanırsanız, iş parçacığı zamanlayıcı bir daha az iş parçacığını yönetir, java bildirimini kullanmanız gerekmez. Temel olarak, aynı şeyi yapmak için daha az kaynak kullanırsınız. – lenkite
İşletim sistemi, senkronize olmayan IO işlemlerinin yürütüldüğü sırayı da optimize edebilir. Örneğin, bir dosyada eşzamansız olarak gerçekleştirilen çok sayıda bölgeye ait çok sayıda okuyucunuz varsa, OS, tüm işlemleri tam olarak verilen sırayla yürütmekten endişelenmenize gerek olmadan bunları sıralı okumalar halinde gruplandırabilir. –