Go의 Syscall.RawSyscall() 및 Syscall.Syscall() 이해
Go의 syscall 패키지를 처음 접하는 사람들을 위한 Syscall.RawSyscall () 및 Syscall.Syscall() 함수는 어려울 수 있습니다. 미묘한 차이를 명확히 하기 위한 자세한 개요는 다음과 같습니다.
Syscall.RawSyscall()
매개변수:
반환 값:
어셈블리 코드 구현:
Darwin/amd64 시스템의 경우 Syscall.RawSyscall()의 어셈블리 코드는 여기에서 찾을 수 있습니다: https://golang.org /src/pkg/syscall/asm_darwin_amd64.s?h=RawSyscall
Syscall.Syscall()
Syscall.Syscall ()는 시스템 호출 실행 전후에 Runtime.entersyscall() 및 Runtime.exitsyscall() 함수를 호출한다는 점에서만 Syscall.RawSyscall()과 다릅니다. 이를 통해 Go 런타임은 고루틴의 시스템 호출 사용을 추적하고 제어할 수 있습니다.
사용법:
Syscall.Syscall()은 일반적으로 Syscall.RawSyscall 대신 사용해야 합니다. () 대부분의 목적에 사용됩니다. Syscall.Syscall()은 Goroutine 컨텍스트 전환을 처리하여 선점 및 멀티태스킹을 활성화합니다. 런타임 컨텍스트 전환 메커니즘을 우회해야 하는 특정 요구가 있는 경우에만 Syscall.RawSyscall()을 사용하십시오.
예:
자신만의 syscall 함수를 작성하려면 한 가지 접근 방식을 사용하세요. is:
그러나 이 예에는 어셈블리 프로그래밍과 시스템 수준에 대한 깊은 지식이 필요합니다. 자세한 내용은 가능하므로 Syscall.Syscall()을 사용하는 것이 좋습니다.
위 내용은 Go에서 `Syscall.RawSyscall()`과 `Syscall.Syscall()`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!