dpr77335 2013-06-10 03:36
浏览 24
已采纳

有没有办法知道通道缓冲区中有多少条消息?

I have identified a bottleneck in my program, it is a buffered channel. I would like to give client an indication of system load, which should be indicated by number of messages buffered in the channel.

Is there a way in Go to tell how many buffered messages there are in a channel?

If you also have a Java background, I am looking for an equivelent of this: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/LinkedBlockingQueue.html#size()

  • 写回答

2条回答 默认 最新

  • dpp89959 2013-06-10 04:05
    关注

    Length and capacity

    The built-in functions len and cap take arguments of various types and return a result of type int. The implementation guarantees that the result always fits into an int.

    Call      Argument type    Result
    
    len(s)    chan T           number of elements queued in channel buffer
    
    cap(s)    chan T           channel buffer capacity
    

    The len function for a channel gives the number of elements queued in the channel buffer. For example,

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

    Output:

    2 8
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 表达式必须是可修改的左值
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题