Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis kapasiti dan panjang Saluran di Golang

Analisis kapasiti dan panjang Saluran di Golang

WBOY
WBOYasal
2023-08-09 22:12:302019semak imbas

Golang 中 Channels 的容量和长度解析

Analisis kapasiti dan panjang Saluran di Golang

Di Golang, Saluran ialah mekanisme penting untuk komunikasi dan penyegerakan antara goroutin. Ia boleh digunakan untuk memindahkan data antara coroutine yang berbeza untuk mencapai penyegerakan dan perkongsian data. Apabila menggunakan Saluran, kami sering melibatkan konsep kapasiti dan panjang Saluran. Artikel ini akan menganalisis kapasiti dan panjang Saluran di Golang dan menggambarkannya dengan contoh kod.

1. Kapasiti Saluran

Kapasiti Saluran ialah bilangan maksimum elemen yang boleh disimpan. Apabila menggunakan fungsi buat untuk mencipta Saluran, anda boleh menentukan kapasiti Saluran melalui parameter kedua. Contohnya:

ch := make(chan int, 5)

Dalam kod di atas, Saluran jenis int dengan kapasiti 5 dicipta. Ini bermakna Saluran boleh menyimpan sehingga 5 elemen.

Apabila menghantar elemen ke Saluran penuh, operasi penghantaran akan disekat sehingga coroutine lain menerima elemen daripada Saluran. Apabila menerima elemen daripada Saluran kosong, operasi penerimaan juga akan disekat sehingga coroutine lain menghantar elemen ke Saluran.

Gunakan fungsi len untuk mendapatkan panjang semasa Saluran (iaitu, bilangan elemen yang telah disimpan). Contohnya:

length := len(ch)

Dalam kod di atas, panjang akan mendapat bilangan elemen yang disimpan dalam saluran ch.

2. Panjang Saluran

Panjang Saluran ialah bilangan elemen yang disimpan pada masa ini. Apabila menggunakan fungsi len, jika digunakan pada operasi terima, ia akan mengembalikan bilangan elemen dalam Saluran yang belum diterima. Jika digunakan pada operasi hantar, ia akan mengembalikan perbezaan antara bilangan elemen yang belum diterima dan kapasiti Saluran. Contohnya:

length := len(ch)

Dalam kod di atas, panjang akan mendapat bilangan elemen yang disimpan dalam saluran ch.

Seterusnya kami menggunakan contoh kod untuk menggambarkan konsep kapasiti dan panjang Saluran.

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int, 3) // 创建容量为3的int类型Channel

    go func() {
        for i := 1; i <= 5; i++ {
            ch <- i // 发送元素到Channel中
            fmt.Printf("发送了元素:%d,长度:%d,容量:%d
", i, len(ch), cap(ch))
        }
    }()

    go func() {
        time.Sleep(2 * time.Second) // 暂停2秒

        for i := 1; i <= 5; i++ {
            num := <-ch // 从Channel中接收元素
            fmt.Printf("接收到了元素:%d,长度:%d,容量:%d
", num, len(ch), cap(ch))
        }
    }()

    time.Sleep(5 * time.Second) // 暂停5秒
}

Dalam kod di atas, kami mencipta Saluran dengan kapasiti 3, dan kemudian memulakan dua coroutine, satu untuk menghantar elemen ke Saluran dan satu lagi untuk menerima elemen daripada Saluran.

Jalankan kod di atas dan output adalah seperti berikut:

Elemen dihantar: 1, panjang: 1, kapasiti: 3
Elemen dihantar: 2, panjang: 2, kapasiti: 3
Elemen dihantar: 3, panjang: 3, kapasiti :3
Elemen yang diterima: 1, panjang: 2, kapasiti: 3
Elemen yang diterima: 2, panjang: 1, kapasiti: 3
Elemen yang diterima: 3, panjang: 0, kapasiti: 3
Elemen dihantar: 4 , panjang: 1, kapasiti: 3
Elemen yang dihantar: 5, panjang: 2, kapasiti: 3
Elemen yang diterima: 4, panjang: 1, kapasiti: 3
Elemen yang diterima: 5, panjang: 0, kapasiti: 3

Seperti yang dapat dilihat dari output, apabila kapasiti Saluran penuh, operasi penghantaran disekat, dan panjangnya sama dengan kapasiti apabila Saluran kosong, operasi penerimaan disekat, dan panjangnya sama dengan 0.

Ringkasan:

Kapasiti dan panjang Saluran ialah atribut penting Saluran di Golang. Kapasiti merujuk kepada bilangan maksimum elemen yang boleh disimpan oleh Saluran, dan panjang merujuk kepada bilangan elemen yang telah disimpan. Apabila menggunakan Saluran, kita perlu memberi perhatian kepada perubahan dalam kapasiti dan panjang Saluran untuk mengelakkan kehilangan data dan penyekatan coroutine.

Atas ialah kandungan terperinci Analisis kapasiti dan panjang Saluran di 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