商君

导航

Go Example--限速

package main

import (
	"fmt"
	"time"
)

func main() {
	requests := make(chan int, 5)
	for i := 1; i <= 5; i++ {
		requests <- i
	}
	close(requests)
	//初始化一个打点器
	limiter := time.Tick(time.Millisecond * 500)

	for req := range requests {
		//每500ms读取一次数据,控制for循环的速度
		<-limiter
		fmt.Println("request", req, time.Now())
	}

	burstyLimiter := make(chan time.Time, 3)
	for i := 0; i < 3; i++ {
		burstyLimiter <- time.Now()
	}
	go func() {
		for t := range time.Tick(time.Millisecond * 2000) {
			//单起协程每2000ms往chan里面写入数据
			burstyLimiter <- t
		}
	}()
	burstyRequests := make(chan int, 5)
	for i := 1; i <= 5; i++ {
		burstyRequests <- i
	}
	close(burstyRequests)
	for req := range burstyRequests {
		//前3个一次执行完成,后面两个每2000ms读取一次数据,控制for循环的速度
		<-burstyLimiter
		fmt.Println("request", req, time.Now())
	}
}

posted on 2018-10-22 19:35  漫步者01  阅读(115)  评论(0编辑  收藏  举报