Table des matières
parent.js" >parent.js
son.js" >son.js
test.js" > test.js
Couper" >Couper
Pourquoi le nom du module de Gouri a-t-il une mauvaise majuscule et peut-il toujours être chargé ? " >Pourquoi le nom du module de Gouri a-t-il une mauvaise majuscule et peut-il toujours être chargé ?
" >) Mais c'est toute la vérité.
Maison interface Web js tutoriel L'histoire entre node.js et macOS

L'histoire entre node.js et macOS

Dec 18, 2017 am 11:22 AM
javascript macos node.js

Cet article utilise une courte histoire pour partager avec vous l'histoire entre node.js et macOS. J'espère qu'il pourra aider tout le monde.

George G a fait un petit test sur son ordinateur, mais les résultats ont été bien différents de ceux attendus.

Alors regardons d'abord ce qui est écrit dans ce petit test :

Il y a trois fichiers au total, et le code total ne dépasse pas 15 lignes

<span style="font-size: 14px;">parent.js</span>

<span style="font-size: 14px;">class Parent {}<br><br>module.exports = Parent<br></span>
Copier après la connexion

<span style="font-size: 14px;">son.js</span>

<span style="font-size: 14px;">//加载时把模块文件名首字母大写了(不正确的)<br/>const Parent = require(&#39;./Parent&#39;)<br/><br/>class Son extends Parent {}<br/><br/>module.exports = Son<br/></span>
Copier après la connexion

test.js

<span style="font-size: 14px;">//加载时把模块名首字母大写(不正确的)<br/>const ParentIncorrect = require(&#39;./Parent&#39;)<br/>//通过正确的模块文件名加载(正确)<br/>const Parent = require(&#39;./parent&#39;)<br/><br/>const Son = require(&#39;./son&#39;)<br/><br/>const ss = new Son()<br/><br/>//测试结果<br/>console.log(ss instanceof Parent) // false<br/>console.log(ss instanceof ParentIncorrect) // true<br/></span>
Copier après la connexion

L'étudiant George G a les questions suivantes :

  1. <code><span style="font-size: 14px;">son.js</span>son.js< Les deux 🎜> et <code><span style="font-size: 14px;">test.js</span>test.js ont des références de nom de fichier incorrectes (problèmes de cas). Pourquoi aucune erreur n’est-elle signalée ?

  2. Résultat du test, pourquoi <span style="font-size: 14px;">ss instanceof ParentIncorrect === true</span><span style="font-size: 14px;">ss instanceof ParentIncorrect === true</span>

     ? J'ai toléré de ne pas signaler d'erreur, mais pourquoi pensais-je quand même que j'étais l'instance du module chargée avec un nom incorrect ?

Si vous, camarade de classe, avez déjà une compréhension claire des problèmes ci-dessus, félicitations, vous pouvez écrire un stylo pour calmer le ciel, et vos arts martiaux peuvent montez à cheval pour déterminer le monde ; vous pouvez connaître votre mère sur le kang Montons sur le kang et apprenons les chaussures !

Mais si vous ne savez pas pourquoi ? D'accord, certains d'entre moi le diront, et certains d'entre vous le regarderont.

En fait, la méthode de diagnostic (débogage dans un style prétentieux) est similaire à celle de la médecine traditionnelle chinoise. Vous pouvez choisir une ou deux des quatre méthodes de regarder, sentir,. demander et palper pour trouver la réponse.

Espoir

Il n'y a pas beaucoup de code Après l'avoir lu pendant un moment, même sans mes commentaires, je pense que les étudiants attentifs trouveront. le vrai fichier. S'il y a une différence entre le nom et le code lors de son introduction, alors il doit y avoir un problème ici. Souvenez-vous du problème, continuons

écoutez

.

Même si, je ne sens rien dans le code

Demandez

Allez, un Une partie très importante de l'ingénierie logicielle est que la communication ne se fait pas nécessairement avec des collègues qui rencontrent des bugs. Cela peut être vous-même, cela peut être le contrôle qualité, et bien sûr, cela peut être le PM ou votre patron. Vous n'avez pas posé la question que vous vouliez savoir, il n'a pas précisé à quoi il voulait répondre, c'est fini. . . .

Alors qu'est-ce que je veux savoir ? Les deux choses suivantes sont plus raisonnables comme entrée dans le débogage :
  1. Système d'exploitation
  2. Exécuter l'Environnement + version
  3. Comment l'avez-vous testé, en ligne de commande ou par un autre moyen

<span style="font-size: 14px;">node.js > 8.0</span> Réponse : macOS ; </span>node.js > 8.0<code><span style="font-size: 14px;">node test.js</span>

 ; >< /code>

Couper

Le moment excitant et profond est arrivé, et je vais passer à l'action. (Afin de décrire en détail le processus de <span style="font-size: 14px;">debug</span><span style="font-size: 14px;">débug</span>

, je ferai comme si je ne savais pas tout ci-dessous à l'avance)

Préparer l'ordinateur, terminé

<span style="font-size: 14px;">node.js > 9.3.0</span>Préparer l'environnement d'exécution</span>node.js > 9.3.0</p>

, Terminé

Copiez le code, Terminé

Exécutez-le, c'est incroyable, aucune erreur n'a été signalée et le résultat en cours d'exécution est ce que George G a dit de cette façon. <code><span style="font-size: 14px;">test.js</span>Pour prouver que je ne suis pas aveugle, j'ai réessayé <code><span style="font-size: 14px;">require</span>test.js dans <span style="font-size: 14px;">require(&#39;./nidayede&#39;)</span>< code><span style="font-size: 14px;">require</span>

a créé un fichier qui n'existe pas du tout

<span style="font-size: 14px;">require('./nidayede')</span><span style="font-size: 14px;">Error: Cannot find module &#39;./nidayede&#39;</span>, Exécutez le code.

Heureusement, une erreur a été signalée cette fois </span>Erreur : Impossible de trouver le module './nidayede'</p><🎜>, donc je ne suis pas fou. C'est un vrai bonheur. <🎜><🎜><🎜><🎜>Voilà donc la première question<🎜><🎜>

Pourquoi le nom du module de Gouri a-t-il une mauvaise majuscule et peut-il toujours être chargé ?

Est-ce lié au système d'exploitation ? Venez trouver un autre <code><span style="font-size: 14px;">windows</span>windows pour essayer. Effectivement, nous sommes arrivés à <code><span style="font-size: 14px;">windows</span><code><span style="font-size: 14px;">windows</span>Error: Cannot find module './Parent', la majuscule est un problème, </span>Erreur : impossible de trouver le module './Parent'</p>

. <span style="font-size: 14px;">macOS</span>Alors, que fait <code><span style="font-size: 14px;">google</span>macOS ? Ne savez-vous pas faire la différence entre les majuscules et les minuscules ? Alors vite

<p>google<img class="alignCenter lazy" src="/static/imghw/default1.png" data-src="https://img2./UZb2Ebq.png!web" / alt="L'histoire entre node.js et macOS" >

(ne me demandez pas pourquoi pas baidu)

<span style="font-size: 14px;">OS X</span> <span style="font-size: 14px;">case-insensitive</span>Il s'avère que le génial </span>OS X</p>

utilise </span>insensible à la casse</p> < par défaut 🎜> Système de fichiers (documentation détaillée).

L'histoire entre node.js et macOS

mais pourquoi ? Quel est le but d’une telle conception anti-humaine ?

<span style="font-size: 14px;">node.js</span>Plus d'explications, allez et venez

Donc, c'est la raison pour laquelle vous ne le faites pas signaler une erreur ? (blâmer </span>node.js</p>

) Mais c'est toute la vérité.

Mais l'affaire n'est pas encore terminée<span style="font-size: 14px;">node.js</span>Qu'est-ce que ça fait d'avoir un voleur comme père ? <span style="font-size: 14px;">const ParentIncorrect = require(&#39;./Parent&#39;)</span>J'en ai vaguement entendu parler. Y a-t-il un cache dans <span style="font-size: 14px;">const Parent = require(&#39;./parent&#39;)</span><span style="font-size: 14px;">node.js</span>

 ? par ça ? Alors d'humeur à essayer, j'ai mis

<span style="font-size: 14px;">const ParentIncorrect = require('./Parent')<strong> et </p> const Parent = require('./parent')<p> J'ai changé la position et j'ai pensé, serait-il juste de le charger d'abord avec le nom correct ? <span style="font-size: 14px;">ParentIncorrect</span>Effectivement, <span style="font-size: 14px;">Parent</span>c'est toujours faux. Vous ne pouvez pas vraiment résoudre le problème en devinant et en faisant semblant<span style="font-size: 14px;">console.log(ParentIncorrect === Parent)</span>Na Bibi<span style="font-size: 14px;">false</span><span style="font-size: 14px;">ParentIncorrect</span>

et

< code><span style="font-size: 14px;">Parent</span><span style="font-size: 14px;">node.js</span> ? J'ai donc écrit </span>console.log(ParentIncorrect === Parent)<code><span style="font-size: 14px;">clone</span>, et le résultat était <span style="font-size: 14px;">node.js</span>false < /code> . Donc ce n’est vraiment pas la même chose, donc le problème vient peut-être de la partie introduction ?

Alors l'idée de faire semblant de regarder <span style="font-size: 14px;">node.js</span><span style="font-size: 14px;">node.js</span><code><span style="font-size: 14px;">require</span> est née (en fait, je ne cherche pas là, problème, je peux enfin le comprendre). Après une longue journée, j'ai finalement clone<code><span style="font-size: 14px;">require</span> et j'ai obtenu un </p>node.js<p>< /code><code><span style="font-size: 14px;">src/node_main.cc => src/node.cc => lib/internal/bootstrap_node.js => lib/module.js</span> Code source (ça a pris beaucoup de temps, tellement lent)

Viens, entrons dans le mystérieux <span style="font-size: 14px;">lib/module.js</span><span style="font-size: 14px;">node.js</span>

Monde du code source. Puisque notre question concerne

<code><span style="font-size: 14px;">require</span>

, commençons par elle, mais trouvons <🎜><🎜>require<🎜> <🎜> Le processus de définition demande un peu de patience, je n'entrerai pas dans les détails ici, juste l'ordre de recherche<🎜><🎜><🎜><🎜>src/node_main.cc => cc => lib/internal/bootstrap_node.js => lib/module.js<🎜> <🎜><🎜><🎜> Je l'ai trouvé, ça y est<🎜><🎜 > lib/module.js<🎜><🎜>, allez droit au but : <🎜><🎜><🎜><🎜>lib/module.js => require<🎜><🎜>
<span style="font-size: 14px;">Module.prototype.require = function(path) {<br/>  assert(path, &#39;missing path&#39;);<br/>  assert(typeof path === &#39;string&#39;, &#39;path must be a string&#39;);<br/>  return Module._load(path, this, /* isMain */ false);<br/>};<br/></span>
Copier après la connexion

好像没什么卵用,对不对?她就调用了另一个方法 <span style="font-size: 14px;">_load</span> ,永不放弃,继续

lib/module.js => _load

<span style="font-size: 14px;">Module._load = function(request, parent, isMain) {<br/>  //debug代码,么卵用,跳过<br/>  if (parent) {<br/>    debug(&#39;Module._load REQUEST %s parent: %s&#39;, request, parent.id);<br/>  }<br/><br/>  if (isMain && experimentalModules) {<br/>    //...<br/>    //...<br/>    //这段是给ES module用的,不看了啊<br/>  }<br/><br/>  //获取模块的完整路径<br/>  var filename = Module._resolveFilename(request, parent, isMain);<br/><br/>  //缓存在这里啊?好激动有没有?!?终于见到她老人家了<br/>  //原来这是这样的,简单的一批,毫无神秘感啊有木有<br/>  var cachedModule = Module._cache[filename];<br/>  if (cachedModule) {<br/>    updateChildren(parent, cachedModule, true);<br/>    return cachedModule.exports;<br/>  }<br/><br/>  //加载native但非内部module的,不看<br/>  if (NativeModule.nonInternalExists(filename)) {<br/>    debug(&#39;load native module %s&#39;, request);<br/>    return NativeModule.require(filename);<br/>  }<br/><br/>  //构造全新Module实例了<br/>  var module = new Module(filename, parent);<br/><br/>  if (isMain) {<br/>    process.mainModule = module;<br/>    module.id = &#39;.&#39;;<br/>  }<br/><br/>  //先把实例引用加缓存里<br/>  Module._cache[filename] = module;<br/><br/>  //尝试加载模块了<br/>  tryModuleLoad(module, filename);<br/><br/>  return module.exports;<br/>};<br/></span>
Copier après la connexion

似乎到这里差不多了,不过我们再深入看看 <span style="font-size: 14px;">tryModuleLoad</span>

lib/module.js => tryModuleLoad

<span style="font-size: 14px;">function tryModuleLoad(module, filename) {<br/>  var threw = true;<br/>  try {<br/>    //加载模块<br/>    module.load(filename);<br/>    threw = false;<br/>  } finally {<br/>    //要是加载失败,从缓存里删除<br/>    if (threw) {<br/>      delete Module._cache[filename];<br/>    }<br/>  }<br/>}<br/></span>
Copier après la connexion

接下来就是真正的 <span style="font-size: 14px;">load</span> 了,要不我们先停一停?

好了,分析问题的关键在于不忘初心,虽然到目前为止我们前进的比较顺利,也很爽对不对?。但我们的此行的目的并不是爽,好像是有个什么疑惑哦!于是,我们再次梳理下问题:

  1. <span style="font-size: 14px;">son.js</span> 里用首字母大写(不正确)的模块名引用了 <span style="font-size: 14px;">parent.js</span>

  2. <code><span style="font-size: 14px;">test.js</span> 里,引用了两次 <span style="font-size: 14px;">parent.js</span> ,一次用完全一致的模块名;一次用首字母大写的模块名。结果发现 <span style="font-size: 14px;">son instanceof require(&#39;./parent&#39;) === false</span>

既然没报错的问题前面已经解决了,那么,现在看起来就是加载模块这个部分可能出问题了,那么问题到底是什么?我们怎么验证呢?

这个时候我看到了这么一句话 <span style="font-size: 14px;">var cachedModule = Module._cache[filename];</span> ,文件名是作为缓存的 <span style="font-size: 14px;">key</span> ,来吧,是时候看看 <span style="font-size: 14px;">Module._cache</span> 里存的模块 <span style="font-size: 14px;">key</span> 都是什么牛鬼蛇神了,打出来看看吧,于是我在 <code><span style="font-size: 14px;">test.js</span> 里最后面加了一句 <span style="font-size: 14px;">console.log(Object.keys(require.cache))</span> ,我们看看打出了什么结果

<span style="font-size: 14px;">false<br/>true<br/>[ &#39;/Users/admin/codes/test/index.js&#39;,<br/>  &#39;/Users/admin/codes/test/Parent.js&#39;,<br/>  &#39;/Users/admin/codes/test/parent.js&#39;,<br/>  &#39;/Users/admin/codes/test/son.js&#39; ]<br/></span>
Copier après la connexion

真相已经呼之欲出了, <span style="font-size: 14px;">Module._cache</span> 里真的出现了两个 <span style="font-size: 14px;">[p|P]arent</span><span style="font-size: 14px;">macOS</span> 默认不区分大小写,所以她找到的其实是同一个文件;但 <span style="font-size: 14px;">node.js</span> 当真了,一看文件名不一样,就当成不同模块了),所以最后问题的关键就在于 <span style="font-size: 14px;">son.js</span> 里到底引用时用了哪个名字(上面我们用了首字母大写的 <span style="font-size: 14px;">require(&#39;./Parent.js&#39;)</span> ),这才导致了 <code><span style="font-size: 14px;">test.js</span> 认贼作父的梗。

如果我们改改 <span style="font-size: 14px;">son.js</span> ,把引用换成 <span style="font-size: 14px;">require(&#39;./parEND.js&#39;)</span> ,再次执行下 <code><span style="font-size: 14px;">test.js</span> 看看结果如何呢?

<span style="font-size: 14px;">false<br/>false<br/>[ &#39;/Users/haozuo/codes/test/index.js&#39;,<br/>  &#39;/Users/haozuo/codes/test/Parent.js&#39;,<br/>  &#39;/Users/haozuo/codes/test/parent.js&#39;,<br/>  &#39;/Users/haozuo/codes/test/son.js&#39;,<br/>  &#39;/Users/haozuo/codes/test/parENT.js&#39; ]<br/></span>
Copier après la connexion

没有认贼作父了对不对?再看 <span style="font-size: 14px;">Module._cache</span> 里,原来是 <span style="font-size: 14px;">parENT.js</span> 也被当成一个单独的模块了。

Donc, en supposant que le nom de fichier de votre module comporte <code><span style="font-size: 14px;">n</span>n caractères, théoriquement, dans <span style="font-size: 14px;">macOS</span><span style="font-size: 14px;">macOS</span><span style="font-size: 14px;">node.js</span> Dans un système de fichiers insensible à la casse, vous pouvez utiliser node.js<span style="font-size: 14px;">2</span> pour le sortir Maximum <code><span style="font-size: 14px;">n</span>2 sur

<p>n<span style="font-size: 14px;"></span></p> alimente les caches pour <span style="font-size: 14px;">macOS</span> N'est-ce pas misérable ! ? Heureusement,

<span style="font-size: 14px;">macOS</span>

peut toujours être modifié pour être sensible à la casse, réinstaller le système sur un disque grille ou créer une nouvelle partition.

Bien que le problème ne soit pas difficile, la détermination et les idées pour explorer le problème sont toujours importantes.

Recommandations associées :

Vous apprendre à utiliser node.js pour créer un processus enfant

PHP et Node.js

Méthode du mode publication-abonnement de Node.js

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre à jour la dernière version de Bybit Exchange? Y aura-t-il un impact s'il n'est pas mis à jour? Comment mettre à jour la dernière version de Bybit Exchange? Y aura-t-il un impact s'il n'est pas mis à jour? Feb 21, 2025 pm 10:54 PM

La façon de mettre à jour les échanges de recours varie selon la plate-forme et l'appareil: mobile: vérifiez les mises à jour et installez dans l'App Store. Client de bureau: vérifiez les mises à jour dans le menu d'aide et installez automatiquement. Page Web: Vous devez accéder manuellement au site officiel pour les mises à jour. Le défaut de mise à jour de l'échange peut entraîner des vulnérabilités de sécurité, des limitations fonctionnelles, des problèmes de compatibilité et une réduction de l'efficacité de l'exécution des transactions.

Installation officielle du site officiel de Bitget (Guide du débutant 2025) Installation officielle du site officiel de Bitget (Guide du débutant 2025) Feb 21, 2025 pm 08:42 PM

Bitget est un échange de crypto-monnaie qui fournit une variété de services de trading, notamment le trading au comptant, le trading de contrats et les dérivés. Fondée en 2018, l'échange est basée à Singapour et s'engage à fournir aux utilisateurs une plate-forme de trading sûre et fiable. Bitget propose une variété de paires de trading, notamment BTC / USDT, ETH / USDT et XRP / USDT. De plus, l'échange a une réputation de sécurité et de liquidité et offre une variété de fonctionnalités telles que les types de commandes premium, le trading à effet de levier et le support client 24/7.

Counper Exchange Software Channel Entrée du site Web officiel Counper Exchange Software Channel Entrée du site Web officiel Feb 21, 2025 pm 10:39 PM

L'entrée officielle du site Web de l'échange de Coinsuper: https://www.coinsuper.com. Les canaux de téléchargement du client sont: le client Windows, le client macOS et le mobile (iOS / Android). L'inscription nécessite un e-mail, un numéro de téléphone mobile et un mot de passe, et vous devez effectuer une authentification réelle avant de pouvoir échanger. La plate-forme fournit une variété de transactions d'actifs numériques, notamment Bitcoin, Ethereum, etc., avec le taux de frais de transaction de 0,1% pour les commandes et les accepteurs. Les garanties de sécurité comprennent le stockage du portefeuille à froid, la vérification à double facteur, les mesures de financement anti-monnaie et le financement antiterroriste et avec le public de la sécurité

Le package d'installation OUYI OKX est directement inclus Le package d'installation OUYI OKX est directement inclus Feb 21, 2025 pm 08:00 PM

OUYI OKX, le premier échange mondial d'actifs numériques, a maintenant lancé un package d'installation officiel pour offrir une expérience de trading sûre et pratique. Le package d'installation OKX de OUYI n'a pas besoin d'être accessible via un navigateur. Le processus d'installation est simple et facile à comprendre.

OUYI Exchange Télécharger le portail officiel OUYI Exchange Télécharger le portail officiel Feb 21, 2025 pm 07:51 PM

Ouyi, également connu sous le nom d'OKX, est une plate-forme de trading de crypto-monnaie de pointe. L'article fournit un portail de téléchargement pour le package d'installation officiel d'Ouyi, qui facilite les utilisateurs pour installer le client Ouyi sur différents appareils. Ce package d'installation prend en charge les systèmes Windows, Mac, Android et iOS. Une fois l'installation terminée, les utilisateurs peuvent s'inscrire ou se connecter au compte OUYI, commencer à négocier des crypto-monnaies et profiter d'autres services fournis par la plate-forme.

Comment configurer la tâche de synchronisation APScheduler en tant que service sur macOS? Comment configurer la tâche de synchronisation APScheduler en tant que service sur macOS? Apr 01, 2025 pm 06:09 PM

Configurez la tâche de synchronisation APScheduler en tant que service sur la plate-forme MacOS, si vous souhaitez configurer la tâche de synchronisation APScheduler en tant que service, similaire à Ngin ...

Comment télécharger OKX Trading Platform Comment télécharger OKX Trading Platform Mar 26, 2025 pm 05:18 PM

La plate-forme de trading OKX peut être téléchargée via des appareils mobiles (Android et iOS) et des ordinateurs (Windows et MacOS). 1. Les utilisateurs d'Android peuvent le télécharger à partir du site officiel ou de Google Play, et ils doivent faire attention aux paramètres de sécurité. 2. Les utilisateurs iOS peuvent le télécharger via l'App Store ou suivre l'annonce officielle pour obtenir d'autres méthodes. 3. Les utilisateurs d'ordinateurs peuvent télécharger le client du système correspondant à partir du site officiel. Assurez-vous toujours d'utiliser les canaux officiels lors du téléchargement et inscrivez-vous, connectez-vous à des paramètres de sécurité après l'installation.

Quatre façons d'implémenter le multithreading dans le langage C Quatre façons d'implémenter le multithreading dans le langage C Apr 03, 2025 pm 03:00 PM

Le multithreading dans la langue peut considérablement améliorer l'efficacité du programme. Il existe quatre façons principales d'implémenter le multithreading dans le langage C: créer des processus indépendants: créer plusieurs processus en cours d'exécution indépendante, chaque processus a son propre espace mémoire. Pseudo-Multithreading: Créez plusieurs flux d'exécution dans un processus qui partagent le même espace mémoire et exécutent alternativement. Bibliothèque multi-thread: Utilisez des bibliothèques multi-threades telles que PTHEADS pour créer et gérer des threads, en fournissant des fonctions de fonctionnement de thread riches. Coroutine: une implémentation multi-thread légère qui divise les tâches en petites sous-tâches et les exécute tour à tour.

See all articles