Rumah >pembangunan bahagian belakang >Golang >Apakah Perbezaan Antara `Syscall.RawSyscall()` dan `Syscall.Syscall()` dalam Go?
Memahami Syscall.RawSyscall() dan Syscall.Syscall() dalam Go
Bagi mereka yang baru menggunakan pakej syscall Go, Syscall.RawSyscall () dan fungsi Syscall.Syscall() boleh menjadi menakutkan. Berikut ialah gambaran keseluruhan terperinci untuk menjelaskan nuansanya:
Syscall.RawSyscall()
Parameter:
Nilai Pulangan:
Pelaksanaan Kod Pemasangan:
Untuk sistem Darwin/amd64, kod pemasangan untuk Syscall.RawSyscall() boleh didapati di sini: https://golang.org /src/pkg/syscall/asm_darwin_amd64.s?h=RawSyscall
Syscall.Syscall()
Syscall.Syscall () berbeza daripada Syscall.RawSyscall() hanya dengan memanggil fungsi runtime.entersyscall() dan runtime.exitsyscall() sebelum dan selepas melaksanakan panggilan sistem. Ini membolehkan masa jalan Go untuk menjejak dan mengawal penggunaan goroutine bagi panggilan sistem.
Penggunaan:
Syscall.Syscall() biasanya harus digunakan dan bukannya Syscall.RawSyscall () untuk kebanyakan tujuan. Syscall.Syscall() mengendalikan penukaran konteks Goroutine, mendayakan preemption dan multitasking. Hanya gunakan Syscall.RawSyscall() jika anda mempunyai keperluan khusus untuk memintas mekanisme penukaran konteks masa jalan.
Contoh:
Untuk menulis fungsi syscall anda sendiri, satu pendekatan ialah:
Contoh ini, walau bagaimanapun, memerlukan pengetahuan mendalam tentang pengaturcaraan pemasangan dan peringkat sistem butiran, jadi disyorkan untuk menggunakan Syscall.Syscall() apabila boleh.
Atas ialah kandungan terperinci Apakah Perbezaan Antara `Syscall.RawSyscall()` dan `Syscall.Syscall()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!