Home  >  Article  >  Backend Development  >  Capacity and length analysis of Channels in Golang

Capacity and length analysis of Channels in Golang

WBOY
WBOYOriginal
2023-08-09 22:12:302019browse

Golang 中 Channels 的容量和长度解析

Capacity and length analysis of Channels in Golang

In Golang, Channel is a method used for communication and synchronization between goroutines. important mechanism. It can be used to transfer data between different coroutines to achieve data synchronization and sharing. When using Channel, we often involve the concepts of Channel capacity and length. This article will analyze the capacity and length of Channels in Golang and illustrate it with code examples.

1. Capacity of Channel

The capacity of Channel is the maximum number of elements that can be stored. When using the make function to create a Channel, you can specify the capacity of the Channel through the second parameter. For example:

ch := make(chan int, 5)

In the above code, a Channel of type int with a capacity of 5 is created. This means that the Channel can store up to 5 elements.

When sending an element to a full Channel, the sending operation will be blocked until another coroutine receives an element from the Channel. When receiving elements from an empty Channel, the receiving operation will also be blocked until another coroutine sends an element to the Channel.

Use the len function to get the current length of the Channel (that is, the number of elements that have been stored). For example:

length := len(ch)

In the above code, length will get the number of elements stored in the Channel of ch.

2. The length of Channel

The length of Channel is the number of elements currently stored. When using the len function, if used on a receive operation, it will return the number of elements in the Channel that have not yet been received. If used on a send operation, it will return the difference between the number of elements that have not yet been received and the capacity of the Channel. For example:

length := len(ch)

In the above code, length will get the number of elements stored in the Channel of ch.

Next we use code examples to illustrate the concepts of Channel capacity and length.

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秒
}

In the above code, we created a Channel with a capacity of 3, and then started two coroutines, one for sending elements to the Channel, and the other for receiving from the Channel. element.

Run the above code, the output is as follows:

Sent elements: 1, length: 1, capacity: 3
Sent elements: 2, length: 2, capacity: 3
Sent elements: 3, length: 3, capacity: 3
Received elements: 1, length: 2, capacity: 3
Received elements: 2, length: 1, capacity: 3
Received Element arrived: 3, length: 0, capacity: 3
Sent element: 4, length: 1, capacity: 3
Sent element: 5, length: 2, capacity: 3
Received element :4, length: 1, capacity: 3
Received elements: 5, length: 0, capacity: 3

As can be seen from the output, when the capacity of the Channel is full, the send operation is Blocked, and the length is equal to the capacity; when the Channel is empty, the receiving operation is blocked, and the length is equal to 0.

Summary:

The capacity and length of Channel are important attributes of Channel in Golang. The capacity refers to the maximum number of elements that the Channel can store, and the length refers to the number of elements that have been stored. When using Channel, we need to pay attention to changes in the capacity and length of the Channel to avoid data loss and blocking of the coroutine.

The above is the detailed content of Capacity and length analysis of Channels in Golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn