Kuasai mod konkurensi dan pengkomputeran teragih bahasa Go

王林
Lepaskan: 2023-11-30 09:28:08
asal
1243 orang telah melayarinya

Kuasai mod konkurensi dan pengkomputeran teragih bahasa Go

Kuasai mod konkurensi dan pengkomputeran teragih bagi bahasa Go

Bahasa Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google. Ia terkenal dengan kesederhanaan, kecekapan dan prestasi konkurensi yang berkuasa, dan digunakan secara meluas untuk membina perkhidmatan rangkaian berprestasi tinggi dan sistem pengkomputeran teragih. Artikel ini akan memperkenalkan mod konkurensi bagi bahasa Go dan cara menggunakannya untuk pengkomputeran teragih.

Dalam bahasa Go, cara utama untuk mencapai konkurensi adalah melalui goroutine dan saluran. Goroutine ialah benang ringan dan beribu-ribu goroutine boleh dijalankan serentak dalam bahasa Go. Dengan mencipta goroutine, pelbagai tugas boleh dilaksanakan secara serentak, dengan itu meningkatkan prestasi serentak aplikasi. Saluran adalah mekanisme yang digunakan untuk komunikasi antara goroutine.

Pengaturcaraan serentak yang cekap boleh dicapai dengan menguraikan tugasan kepada berbilang goroutin dan menggunakan saluran untuk komunikasi. Sebagai contoh, senario aplikasi biasa ialah merangkak kandungan web dan memprosesnya secara serentak. Anda boleh mencipta goroutine untuk meminta kandungan halaman web, dan kemudian menghantar data yang diperoleh ke goroutine pemprosesan untuk penghuraian dan penyimpanan.

Berikut ialah contoh kod ringkas yang menunjukkan cara menggunakan goroutine dan saluran untuk melaksanakan fungsi merangkak secara serentak kandungan web:

package main

import (
    "fmt"
    "net/http"
)

func fetch(url string, ch chan<- string) {
    resp, err := http.Get(url)
    if err != nil {
        ch <- fmt.Sprint(err)
        return
    }
    defer resp.Body.Close()

    ch <- fmt.Sprintf("Fetched %s", url)
}

func main() {
    urls := []string{"http://www.google.com", "http://www.baidu.com", "http://www.sina.com"}

    ch := make(chan string)

    for _, url := range urls {
        go fetch(url, ch)
    }

    for range urls {
        fmt.Println(<-ch)
    }
}
Salin selepas log masuk

Dalam kod di atas, fungsi ambil digunakan untuk mendapatkan kandungan web dan menghantar hasilnya ke saluran . Dalam fungsi utama, dengan menggunakan goroutine dan saluran, permintaan pengambilan berbilang boleh dimulakan pada masa yang sama dan hasilnya boleh dicetak selepas menerimanya.

Selain pengaturcaraan serentak, bahasa Go juga menyediakan beberapa perpustakaan dan alatan untuk melaksanakan pengkomputeran teragih. Salah satu alat penting ialah pakej rpc yang disertakan dengan bahasa Go, yang menyediakan rangka kerja RPC (panggilan prosedur jauh) yang ringkas dan berkuasa.

Menggunakan pakej rpc, anda boleh membina sistem pengkomputeran teragih dengan mudah. Pembangun hanya perlu menentukan antara muka perkhidmatan dan pelaksanaan, dan kemudian gunakan fungsi rpc.Daftar untuk mendaftarkan perkhidmatan kepada pelayan RPC. Seterusnya, pelanggan boleh menyambung ke pelayan RPC melalui fungsi rpc.Dail dan memanggil kaedah perkhidmatan berdaftar untuk melaksanakan pengkomputeran teragih.

Berikut ialah contoh kod ringkas yang menunjukkan cara menggunakan pakej rpc untuk pengkomputeran teragih:

package main

import (
    "fmt"
    "net"
    "net/rpc"
)

type MathService struct{}

func (m *MathService) Multiply(args *[]int, reply *int) error {
    *reply = (*args)[0] * (*args)[1]
    return nil
}

func main() {
    mathService := new(MathService)
    rpc.Register(mathService)

    l, err := net.Listen("tcp", ":1234")
    if err != nil {
        fmt.Println(err)
        return
    }

    for {
        conn, _ := l.Accept()
        go rpc.ServeConn(conn)
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan struktur MathService, yang mengandungi kaedah Darab. Kaedah ini digunakan untuk menerima dua integer dan menyimpan hasil pendaraban mereka dalam penunjuk balasan. Seterusnya, kami menggunakan fungsi rpc.Register untuk mendaftarkan MathService pada pelayan RPC. Akhir sekali, permintaan pelanggan diproses dengan memanggil fungsi rpc.ServeConn.

Di sisi pelanggan, anda boleh menyambung ke pelayan RPC melalui fungsi rpc.Dail dan hubungi kaedah perkhidmatan untuk mendapatkan keputusan.

Model konkurensi dan keupayaan pengkomputeran teragih bagi bahasa Go menjadikannya pilihan ideal untuk membina sistem teragih berprestasi tinggi dan berskala. Dengan menguasai pengaturcaraan serentak dan menggunakan pakej rpc, pembangun boleh melaksanakan tugas serentak dan logik pengkomputeran teragih dengan lebih mudah. Sama ada membina perkhidmatan rangkaian atau sistem pengkomputeran teragih, menguasai model konkurensi dan teknologi pengkomputeran teragih bahasa Go ialah kemahiran penting untuk pembangun.

Atas ialah kandungan terperinci Kuasai mod konkurensi dan pengkomputeran teragih bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!