Maison >développement back-end >Golang >## Quand dois-je utiliser Syscall.RawSyscall() ou Syscall.Syscall() dans Go ?
Le langage Go utilise des appels système pour interagir avec le sous-jacent système opérateur. Le package syscall fournit les fonctionnalités nécessaires pour effectuer des appels système. Deux fonctions importantes de ce package sont Syscall.RawSyscall() et Syscall.Syscall().
Objectif :
Fournit un moyen pour effectuer des appels système directement, permettant un contrôle précis.
Paramètres :
Valeurs de retour :
Objectif :
Offre un interface de niveau supérieur pour passer des appels système, gérant certains des détails de niveau inférieur au nom de l'appelant.
Paramètres :
Similaire à Syscall.RawSyscall(), mais aussi accepte un nom d'appel système comme premier paramètre.
Valeurs de retour :
La principale différence entre les deux fonctions réside dans leur approche de la gestion de l'exécution des appels système. Syscall.Syscall() utilise une fonction d'assistance dans la bibliothèque d'exécution pour informer le planificateur qu'il entre dans une opération de blocage, permettant au planificateur de céder le contrôle à une autre goroutine ou thread. En revanche, Syscall.RawSyscall() n'effectue pas cette notification, ce qui signifie que la goroutine actuelle se bloquera jusqu'à la fin de l'appel système.
L'implémentation de Syscall.RawSyscall() dans assembly pour Darwin/amd64 fournit un aperçu des instructions d'assemblage sous-jacentes utilisées pour effectuer les appels système.
61 TEXT ·RawSyscall(SB),7, 62 MOVQ 16(SP), DI 63 MOVQ 24(SP), SI ... 70 SYSCALL ... 76 ok1: ... 80 RET
zsyscall fait référence à un sous-package au sein de syscall qui fournit des wrappers autour des appels système spécifiques au système d'exploitation z/OS.
En ce qui concerne la création de vos propres fonctions syscall, vous utiliserez généralement Syscall.Syscall() et spécifierez le nom de l'appel système et les arguments comme paramètres. Cependant, si vous avez besoin d'un contrôle plus précis ou si vous souhaitez éviter les frais d'exécution, vous pouvez opter pour Syscall.RawSyscall().
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!