Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Coroutine Golang dan pengaturcaraan sistem seperti Unix

Coroutine Golang dan pengaturcaraan sistem seperti Unix

王林
王林asal
2024-04-15 16:24:01853semak imbas

Golang coroutine ialah mekanisme pelaksanaan serentak yang dicipta melalui kata kunci goroutine dan digunakan untuk pengaturcaraan sistem seperti Unix. Ia melaksanakan komunikasi antara coroutine melalui saluran dan boleh digunakan dalam pelayan web serentak untuk meningkatkan prestasi dan kebolehskalaan dalam amalan.

Golang协程与类 Unix 系统编程

Golang coroutines dan pengaturcaraan sistem seperti Unix

Pengenalan

Coroutines ialah mekanisme pelaksanaan serentak yang ringan yang boleh meningkatkan prestasi aplikasi, terutamanya apabila menangani tugasan yang serentak tinggi dan IO-intensif. Bahasa Golang menyediakan sokongan coroutine yang berkuasa, menjadikannya pilihan ideal untuk pengaturcaraan sistem seperti Unix.

Penciptaan dan pengurusan Coroutine

Di Golang, anda boleh menggunakan kata kunci goroutine untuk mencipta coroutine: goroutine 关键字创建协程:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    go func() {
        fmt.Println("这是另一个协程!")
    }()
    runtime.Gosched() // 主动让出 CPU 给其他协程
}

上述代码创建了一个协程,该协程在 main 函数之外执行,并打印一条消息。runtime.Gosched()

package main

import (
    "fmt"
    "time"
)

func main() {
    // 创建一个有缓冲的通道,存放整数
    ch := make(chan int, 10)

    // 在一个协程中向通道发送数据
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i
            time.Sleep(100 * time.Millisecond) // 延迟发送数据
        }
        close(ch) // 关闭通道,表示不再发送数据
    }()

    // 在另一个协程中从通道读取数据
    go func() {
        for {
            v, ok := <-ch
            if !ok {
                break // 通道已关闭
            }
            fmt.Println(v)
        }
    }()

    time.Sleep(1100 * time.Millisecond) // 等待协程执行完毕
}

Kod di atas mencipta coroutine, yang berada dalam utama code> dilaksanakan di luar fungsi dan mencetak mesej. Fungsi <code>runtime.Gosched() secara aktif mengeluarkan sumber CPU dan membenarkan coroutine lain dijalankan.

Komunikasi Saluran

Saluran ialah mekanisme yang digunakan untuk komunikasi antara coroutine di Golang. Ia adalah kaedah komunikasi yang selamat jenis dan tidak menyekat:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, World!\n")
    })

    // 使用 Goroutine 同时监听多个端口
    go http.ListenAndServe(":8080", nil)
    go http.ListenAndServe(":8081", nil)

    select {} // 阻塞主协程,保持服务器运行
}

Contoh Praktikal: Pelayan Web Serentak

Pertimbangkan contoh pelayan web serentak yang mengendalikan permintaan pelanggan:

rrreee

Dengan menggunakan coroutine, pelayan ini boleh Memproses permintaan pada berbilang port serentak, meningkatkan kebolehskalaan dan prestasi. 🎜

Atas ialah kandungan terperinci Coroutine Golang dan pengaturcaraan sistem seperti Unix. 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