Maison >développement back-end >Golang >Pourquoi mon code Cgo est-il plus lent que le code Go prévu ?

Pourquoi mon code Cgo est-il plus lent que le code Go prévu ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 09:44:10343parcourir

Why is my Cgo code slower than expected Go code?

Pourquoi cgo est-il si lent ?

Votre code de test compare le temps d'exécution des fonctions C et Go exécutées 100 millions de fois chacune. La fonction C prend plus de temps que la fonction Golang et vous craignez que quelque chose ne va pas avec votre code de test.

La surcharge élevée liée à l'appel du code C/C via CGo permet de minimiser au mieux les appels CGo. Dans l'exemple fourni, il pourrait être plus efficace de créer une boucle C au lieu d'appeler une fonction CGo à plusieurs reprises dans une boucle.

La configuration du runtime Go pour ses threads peut briser les attentes du code C de plusieurs manières :

  1. Piles goroutines relativement petites
  2. Interaction inappropriée avec le stockage local des threads de libpthread implémentation
  3. Interférence avec le gestionnaire de signal UNIX du runtime Go
  4. Détriment potentiel pour d'autres goroutines si le code C monopolise un thread

Par conséquent, CGo adopte l'approche sûre de l'exécution Code C dans un thread séparé avec une pile traditionnelle.

Contrairement aux langages comme Python où la réécriture du code Les points chauds en C étaient courants pour accélérer les programmes, l'écart de performances de Go entre le code C et Go est beaucoup plus petit. Pensez à réserver CGo pour l'interface avec les bibliothèques existantes, éventuellement avec de petites fonctions wrapper C pour réduire le nombre d'appels requis depuis Go.

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:
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