Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilangan teras lalai Golang

Bilangan teras lalai Golang

PHPz
PHPzasal
2023-05-10 20:10:36528semak imbas

Golang ialah bahasa pengaturcaraan sumber terbuka yang direka untuk memudahkan dan mempercepatkan beberapa tugas pengaturcaraan biasa. Ia digunakan secara meluas dalam pengkomputeran awan, pengaturcaraan rangkaian, pemprosesan data besar dan bidang lain, dan juga menunjukkan prestasi yang sangat baik dalam beberapa aplikasi konkurensi tinggi.

Jadi, mari kita bincangkan isu berapa banyak teras yang ada pada Golang secara lalai.

Di Golang, anda boleh menggunakan kod berikut untuk menanyakan bilangan teras CPU sistem semasa:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    fmt.Println(runtime.NumCPU())
}

Kod ini boleh mengembalikan teras CPU sistem semasa dengan memanggil fungsi NumCPU dalam kuantiti pakej runtime. Apabila menguji pada komputer riba saya, fungsi itu mengembalikan hasil 4.

Jadi, bagaimanakah keputusan ini terhasil? Malah, Golang mendapatkan maklumat CPU melalui antara muka yang disediakan oleh sistem pengendalian. Secara khusus, Golang menggunakan fungsi getcpuinfo berdasarkan panggilan sistem Linux untuk mendapatkan maklumat CPU:

func getcpuinfo() (uint32, error) {
        var info cpu.CacheInfo
        _, b, err := sys.RawSyscall(sys.SYS_ARCH_PRCTL, uintptr(sys.ARCH_GET_CPUID), uintptr(unsafe.Pointer(&info)), 0)
        if err != 0 {
                return 0, os.NewSyscallError("archprctl", err)
        }
        if b != 0 {
                // The kernel returned something we don't understand.
                return 0, fmt.Errorf("unknown arch_prctl result: %d", b)
        }
        // Return the highest non-zero value of cores and threads.
        return uint32(math.Max(float64(info.CoresPerPhysicalPackage), float64(info.ThreadsPerCore))), nil
}

Teras fungsi ini adalah untuk mendapatkan maklumat cache CPU cpu.CacheInfo, dan kemudian dapatkan maklumat nombor teras CPU dari sini .CorsPerPhysicalPackage dan bilangan benang maklumat.ThreadsPerCore, dan akhirnya mengembalikan nilai yang lebih besar bagi kedua-dua kuantiti ini.

Sudah tentu, jika sistem anda tidak berdasarkan kernel Linux, maka Golang akan menggunakan panggilan sistem lain untuk mendapatkan maklumat CPU.

Untuk meringkaskan, Golang menanyakan maklumat CPU sistem semasa melalui antara muka yang disediakan oleh sistem pengendalian secara lalai untuk menentukan bilangan teras CPU. Jika anda perlu menggunakan pemprosesan selari berbilang teras dalam program anda, anda boleh menggunakan mekanisme goroutin dan saluran Golang, yang boleh menjadikan kod anda lebih ringkas dan cekap.

Atas ialah kandungan terperinci Bilangan teras lalai Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:permintaan bersih golang luaranArtikel seterusnya:permintaan bersih golang luaran