java - 为什么NIO的性能比IO好?
阿神
阿神 2017-04-17 17:39:32
0
5
600

我目前已知的原因只有这1个: 就是由于NIO采用缓冲区+通道的方式来传输数据, 而不是IO包的以字节或字符为单元传输数据, 增加了一次处理数据的字节数, 而且这种方式更接近于底层操作系统的IO方式, 所以速度明显优于IO;

除了这一点还有其他的吗?

阿神
阿神

闭关修行中......

répondre à tous(5)
迷茫

0zhangzhun132·Tout à l'heure

1.io est orienté flux, c'est-à-dire que lors de la lecture des données, elles sont lues à partir du flux une par une, donc les données ne peuvent pas être traitées dans leur ensemble et il n'y a pas de tampon ; nio est orienté tampon ; les données sont stockées dans le tampon. , la lecture des données est effectuée dans le tampon, il est donc plus pratique d'effectuer une opération de décalage des données
2 lorsqu'une ligne est bloquée. S'il n'y a actuellement aucune donnée à lire lorsque le processus exécute io, le thread est bloqué. Puisque nio exécute io sur le canal, il n'est pas bloquant. Lorsqu'il n'y a aucune donnée à lire dans un canal, le canal peut être basculé. traiter d'autres io
3. Nio a un sélecteur parmi lequel choisir. Le sélecteur signifie que le thread peut sélectionner plusieurs canaux via le sélecteur, tandis que io ne peut en gérer qu'un seul

.

Fait purement à la main, j'espère que cela vous aidera

EOF

洪涛

Supposons le scénario suivant : sur une machine à 4 cœurs, recevez les requêtes réseau, traitez la logique métier et renvoyez les résultats du traitement au client. Les requêtes réseau sont de 10 000/s. Pendant le traitement de la logique métier, il y a une opération de. écrire un fichier qui doit être bloqué pendant 5 secondes, en supposant que la transmission ne prend pas de temps.

1. Utiliser le traitement BIO :

En raison du long temps d'E/S dans le traitement de la logique métier, le thread de traitement sera bloqué. Dans le cas de plusieurs requêtes, une requête générera un thread pour traiter l'activité, donc dans les 5 secondes, 50 000 threads doivent exister. le système. , utilisé pour gérer la logique métier. Le processeur utilisera la plupart de ses ressources pour gérer la planification des threads.

2. Utilisez le traitement NIO :
Les opérations IO dans NIO sont asynchrones et ne bloqueront pas le thread de logique métier. Dans le cas de plusieurs requêtes, 4 threads métier sont ouverts et un thread occupe un cœur de processeur. peut traiter la logique métier à pleine vitesse. Pour les opérations d'E/S dans l'entreprise, elles peuvent être traitées de manière asynchrone dans le matériel, et les messages sont envoyés au processeur pour un traitement métier ultérieur lorsque les données sont prêtes. À ce stade, seuls quatre threads sont nécessaires pour traiter efficacement l'entreprise, et le traitement est effectué de manière asynchrone. Le processeur n'est presque pas inactif. Il n'est pas nécessaire de consommer des ressources lors de la planification des threads.

刘奇

Qu'il s'agisse d'IO ou de NIO, c'est une manifestation du modèle d'E/S réseau Linux. Il est recommandé d'apprendre le modèle de réseau Linux.

Ty80

1.nio effectue le mappage de la mémoire, éliminant une copie entre l'espace utilisateur et l'espace système
2.nio est une réponse asynchrone, déclenchée, non bloquante, utilisant pleinement les ressources système, principalement c'est le processeur

巴扎黑

<h1>Hé hé</h1>

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal