2010-08-25 6 views
4

Est-ce que quelqu'un sait quelle est la différence de performance entre performances Java NIO vs DotNet IO.Java NIO vs DotNet IO Performance

Lecture this question, il semble que Java-IO standard et DotNet-IO ont performances d'E/S très similaires. Ce qui m'intéresse, c'est que les gars de Java déclarent que la copie de fichiers de masse, les opérations de serveur de fichiers ... etc. devraient être beaucoup plus rapides en raison de l'accès aux canaux de fichiers, etc., en Java-NIO.

Est-il possible que la performance java.nio soit meilleure que DotNet System.IO.

Merci.

Répondre

2

En ce qui concerne la copie de fichiers, il ne devrait pas y avoir de différences significatives, quelle que soit la plate-forme ou l'API que vous utilisez. le goulot de la bouteille est le disque tournant et la recherche de la tête du disque dur. *

ce qui doit arriver, est de déplacer le contenu du disque dur vers une mémoire, puis d'écrire la mémoire sur le disque dur. avec le flux java io traditionnel, il y aura des copies de mémoire supplémentaires. encore ce n'est pas un gaspillage significatif par rapport à la vitesse du disque.

cela peut être facilement vérifié, FileChannel.transferTo/From ne peut pas battre l'ancienne façon de copie de flux d'entrée-sortie de beaucoup. (*) Bien sûr, les disques sont beaucoup plus rapides, mais tant que nous définissons le disque comme le stockage le plus lent après la mémoire, l'argument est conservé. (**) nous pourrions appeler un disque virtuel un disque, qui réside en fait dans la mémoire principale. alors la copie de mémoire est le goulot de la bouteille, et l'argument ne tient plus.

3

En fait, je ne peux pas répondre à cela, mais je peux penser librement ...

.. à la fois Java-File-IO et .Net devrait utiliser des opérations OS pour l'accès underlaying fichier et l'accès aux fichiers est toujours lié IO et non lié à l'unité centrale. Ce qui signifie que les disques sont plus lents que le processeur et la mémoire. Ce qui voudrait dire que Java-File-IO et .Net devraient être les mêmes en termes de performance.

Quand il s'agit de communication Socket Java a fait un travail horrible, et en fait juste ignorer la norme Posix et n'a pas utilisé l'appel OS 'select'. Cela a été corrigé dans Java NIO avec l'introduction de "canaux" qui ne supportent plus que l'architecture sous-jacente. Avant que vous ayez besoin d'allouer un thread pour chaque socket sur lequel vous étiez en train de lire, horrible gaspillage de ressources. Comme .Net est plus récent que Java, je crois qu'ils ne sont jamais tombés dans ce piège et ont ajouté un support pour cela dès le départ .. Mais je n'ai pas utilisé .Net donc je peux dire, je ne peux pas deviner. En ce qui concerne la communication Socket dans les deux cas, Java-NIO et .Net System.IO, les deux doivent être reliés au réseau avant qu'ils ne deviennent de toute façon liés au CPU. Donc je ne pense pas que l'un serait plus rapide que l'autre.

+4

Java NIO ne fonctionne pas plus rapidement que Java IO sur du matériel moderne avec des systèmes d'exploitation modernes. Voir: [L'ancien est nouveau] (http://www.thebuzzmedia.com/java-io-faster-than-nio-old-is-new-again/). Il déclare que «la synchronisation des threads extrêmement bon marché qui existe dans les systèmes d'exploitation modernes combinée à l'explosion des systèmes multi-noyaux» est un facteur expliquant pourquoi le blocage des E/S se traduit par des E/S non bloquantes en Java. – rancidfishbreath

+4

D'après un commentaire sur cet article: "Le débit n'est pas le but de NIO Le point de non-blocage des E/S est de pouvoir gérer des millions de connexions lentes simultanées avec des temps de réponse rapides - un cas où les threads abandonner les connexions après avoir accepté quelques milliers. " –