반응형
채널의 요소 수
버퍼링 된 채널을 사용하여 채널에있는 요소 수를 어떻게 측정합니까? 예를 들어 다음과 같은 채널을 만들고 전송합니다.
send_ch := make(chan []byte, 100)
// code
send_ch <- msg
send_ch 채널에 얼마나 많은 메시지 가 있는지 측정하고 싶습니다 .
동시성으로 인해 측정과 작업 사이에 선점이 발생할 수 있으므로 측정이 정확하지 않다는 것을 알고 있습니다 (예 :이 동영상 Google I / O 2012-Go Concurrency Patterns 에서 논의 됨 ). 나는 이것을 생산자와 소비자 간의 흐름 제어를 위해 사용할 것입니다. 즉, 일단 하이 워터 마크를 통과하면 로우 워터 마크를 통과 할 때까지 일부 동작을 변경합니다.
http://golang.org/pkg/builtin/#len
func len (v Type) int
len 내장 함수는 유형에 따라 v의 길이를 반환합니다.
- 배열 : v의 요소 수.
- 배열에 대한 포인터 : * v의 요소 수 (v가 nil 인 경우에도).
- 슬라이스 또는 맵 : v의 요소 수; v가 nil이면 len (v)는 0입니다.
- 문자열 : v의 바이트 수.
- 채널 : 채널 버퍼에서 큐에 넣은 (읽지 않은) 요소의 수. v가 nil이면 len (v)는 0입니다.
package main
import "fmt"
func main() {
c := make(chan int, 100)
for i := 0; i < 34; i++ {
c <- 0
}
fmt.Println(len(c))
}
다음을 출력합니다.
34
참고 URL : https://stackoverflow.com/questions/13003749/number-of-elements-in-a-channel
반응형
'program story' 카테고리의 다른 글
C # ASP.NET Single Sign-On 구현 (0) | 2020.11.12 |
---|---|
SQL Server : 일괄 처리 문 (즉, "GO"사용)이 좋은 이유는 무엇입니까? (0) | 2020.11.12 |
정적 const와 const의 차이점은 무엇입니까? (0) | 2020.11.11 |
길이 1의 문자열로 반환되는 Java의 문자열에서 첫 번째 문자를 얻는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.11 |
GitHub 위키에서 어떤 종류의 목차를 어떻게 만듭니 까? (0) | 2020.11.11 |