有没有办法告诉通道缓冲区中有多少消息?

6 go

我已经确定了我的程序中的瓶颈,它是一个缓冲通道.我想向客户端提供系统负载的指示,这应该通过通道中缓冲的消息数来指示.

Go中是否有一种方法可以告诉通道中有多少缓冲消息?

如果你也有Java背景,我正在寻找一个相同的:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/LinkedBlockingQueue.html#size()

pet*_*rSO 14

长度和容量

内置函数lencap获取各种类型的参数并返回类型的结果int.实现保证结果始终适合int.

Call      Argument type    Result

len(s)    chan T           number of elements queued in channel buffer

cap(s)    chan T           channel buffer capacity
Run Code Online (Sandbox Code Playgroud)

len通道的功能给出了通道缓冲区中排队的元素数.例如,

package main

import "fmt"

func main() {
    ch := make(chan int, 8)
    ch <- 42
    ch <- 7
    <-ch
    ch <- 64
    // number of queued elements = 1 + 1 - 1 + 1 = 2
    fmt.Println(len(ch), cap(ch))
}
Run Code Online (Sandbox Code Playgroud)

输出:

2 8
Run Code Online (Sandbox Code Playgroud)