Maison > interface Web > js tutoriel > le corps du texte

Introduction aux E/S asynchrones de nœud

不言
Libérer: 2018-07-11 15:44:09
original
2485 Les gens l'ont consulté

Cet article présente principalement l'introduction des E/S asynchrones Node, qui ont une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

E/S asynchrones

. 1. Pourquoi utiliser les E/S asynchrones

Expérience utilisateur

javascript est exécuté sur un seul thread, qui est le même thread que le thread de l'interface utilisateur. Si la synchronisation est utilisée, l'interface utilisateur sera exécutée. lorsque javascript est en cours d'exécution, le rendu doit s'arrêter et attendre, ce qui entraîne une très mauvaise expérience utilisateur.

Si la page Web doit demander certaines ressources et les obtenir de manière synchrone, alors nous devons attendre que js obtienne complètement les ressources du serveur avant de continuer à s'exécuter. Pendant cette période, l'interface utilisateur attend, ce qui provoquera le. interaction avec l'utilisateur à extrêmement mauvaise, affectant l'expérience utilisateur.

// 现在请求两个资源
//耗时为M毫秒
getData('from_db');
//耗时为N毫秒
getData('from_remote_api');
Copier après la connexion

Si c'est synchrone, ça prendra du temps(M + N)
Si c'est asynchrone, ça prendra du tempsMax(M, N);

Avec la complexité de l'application , le scénario se transformera en M+N+...和Max(M,N,...), alors les avantages et les inconvénients de la synchronisation et de l'asynchronisme seront plus importants. D'un autre côté, à mesure que les sites Web et les applications se développent, les données sont souvent distribuées sur plusieurs serveurs, et la distribution signifie que les valeurs de M et N augmenteront de manière linéaire, ce qui amplifiera également la différence de performances entre asynchrone et synchrone. Bref, les IO coûtent cher, et les IO distribuées sont encore plus chères !

Allocation de ressources

E/S synchrone monothread

会因阻塞IO使得硬件资源无法得到更优的利用。
Copier après la connexion

Programmation multithread

优点: 可以利用多核CPU有效提升CPU的利用率
缺点: 编程中的死锁、状态同步使得程序员很是头疼。
Copier après la connexion

E/S asynchrones du nœud

node采用的异步IO,利用单线程,远离了多线程死锁、状态同步,利用异步让单线程远离了阻塞,使得CPU得到更好的利用。

为了弥补单线程无法利用多核CPU的问题,Node提供了子进程 `childProcess` ,将一些运算多的任务放入子进程进行高效的运算。
Copier après la connexion

Introduction aux E/S asynchrones de nœud

E/S bloquantes et E/S non bloquantes

E/S bloquantes

阻塞的IO操作就是发起IO操作后,线程阻塞等待IO完成,这期间cpu得不到有效利用。
Copier après la connexion

Introduction aux E/S asynchrones de nœud

E/S non bloquantes

非阻塞IO操作其实就是发起IO操作后,通过事件轮巡,或者事件通知机制,不断查询IO操作是否完成,或者是主线程进入休眠等待事件通知IO结束,然后继续向下执行代码,实际上非阻塞IO期间,cpu要不用来查询要不用来休眠,也没有得到有效利用。依旧是同步IO。
Copier après la connexion

Introduction aux E/S asynchrones de nœud

3. Les E/S asynchrones du nœud

nécessitent un seul lien 事件循环 观察者 请求对象 pour terminer l’intégralité des E/S asynchrones.

En fait, l'IO asynchrone du nœud utilise la technologie du pool de threads. Lorsque l'IO asynchrone est lancée, l'opération io est lancée dans le pool de threads pour être exécutée, puis le thread principal continue d'effectuer d'autres opérations. l'exécution est notifiée via la communication inter-thread. Thread principal, le thread principal exécute le rappel.

Le thread IO est contrôlé par le pool de threads géré par Libuv (sous Linux est implémenté par libeio ; sous window est implémenté par IOCP) et est essentiellement multithread. Autrement dit, 线程池 et 阻塞IO sont utilisés pour simuler 异步IO.

Introduction aux E/S asynchrones de nœud

Principe des IO asynchrones

Lorsque IO est rencontré, placez-le dans un thread IO dans le pool de threads, laissez la tâche est exécuté sur le thread IO, qui est exécuté en mode IO bloquant, puis continue l'exécution sur le thread principal lorsqu'une autre tâche IO est rencontrée, elle est placée dans le pool de threads, puis exécutée sur un autre thread IO (également). en mode IO bloquant), le thread principal continue de s'exécuter.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Analyse du mécanisme du module Node

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal