035_go 언어의 속도 제한

1458 단어
코드 데모
package main

import "fmt"
import "time"

func main() {
	requests := make(chan int, 5)
	for i := 1; i <= 5; i++ {
		requests  
 

  
코드 실행 결과
request 1 2018-04-17 12:57:02.823975218 +0800 CST m=+0.205374957
request 2 2018-04-17 12:57:03.024067833 +0800 CST m=+0.405476106
request 3 2018-04-17 12:57:03.220187209 +0800 CST m=+0.601603847
request 4 2018-04-17 12:57:03.420175881 +0800 CST m=+0.801601050
request 5 2018-04-17 12:57:03.622105704 +0800 CST m=+1.003539485

request 1 2018-04-17 12:57:03.622191244 +0800 CST m=+1.003625029
request 2 2018-04-17 12:57:03.622210962 +0800 CST m=+1.003644748
request 3 2018-04-17 12:57:03.622223153 +0800 CST m=+1.003656939
request 4 2018-04-17 12:57:03.82356235 +0800 CST m=+1.205004724
request 5 2018-04-17 12:57:04.024178896 +0800 CST m=+1.405629826

  
코드 판독
  • go 언어는 채널, 협정, 타점기를 이용하여 속도 제한을 실현한다
  • 우선 우리는 타점기를 이용하여 limiter 채널을 만들었다. 이 채널은 200ms마다 값을 받고 이 채널을 Requests 작업 전에 두면 제한 작용을 한다
  • 버퍼 채널을 이용하여 펄스형의 속도 제한을 할 수 있다. 즉, 원래 200ms당 수신치를 바꾸지 않는 전제에서 짧은 펄스
  • 를 한 번 할 수 있다.
  • 우리는burstyLimiter의 버퍼 채널을 설치했는데 그 안에 3개의 값을 저장했고 200ms마다 값을 저장했다
  • 마찬가지로burstyRequests 채널에 5개의 임무가 있습니다. 우리는burstyLimiter를burstyRequests 임무 앞에 두었습니다
  • 임무를 수행할 때 먼저 한 번의 펄스로 버스티 Limiter의 값을 모두 꺼낸 다음에 200ms마다 임무를 읽는다
  • 좋은 웹페이지 즐겨찾기