zoukankan      html  css  js  c++  java
  • golang 速度限制,time.Tick(time.Second*2) channel,隔2秒后继续执行

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        requests := make(chan int, 5)
        for i := 1; i <= 2; i++ {
            requests <- i
        }
        close(requests)
        limiter := time.Tick(time.Millisecond * 200)
    
        for req := range requests { //会循环两次,前面往requests channel中发送了两个值
            <-limiter  //执行到这里,需要隔 200毫秒才继续往下执行,time.Tick(timer)上面已定义
            fmt.Println("request", req, time.Now())
        }
    
        burstyLimiter := make(chan time.Time, 3)
    
        for i := 0; i < 3; i++ {
            burstyLimiter <- time.Now()  //这里burstyLimiter channel 连续发送了三次值
        }
    
        go func() {
            for t := range time.Tick(time.Second * 2) {
                burstyLimiter <- t // 这里往burstyLimiter channel 循环发送time.Tick
            }
        }()
        burstyRequests := make(chan int, 5)
    
        for i := 1; i <= 5; i++ {
            burstyRequests <- i
            <-burstyLimiter  //前三次没有速度限制,会直接打印出后面的println的内容
            fmt.Println("request", i, time.Now())
        }
    
        close(burstyRequests)
        for req := range burstyRequests {
            <-burstyLimiter  //继续接收burstyLimiter值,除了前三次,后面的都是time.Tick进行速度限制,2秒打印一次,直到此次循环结束
            fmt.Println("request", req, time.Now())
        }
    }

    注,把time.Tick(time.Second)中的值改为秒会更容易查看效果

  • 相关阅读:
    C#基础—string等类的有趣方法_1
    设计模式
    OOP-面向对象程序设计
    CSS3实用效果大全
    HTML5 DOM元素类名相关操作API classList简介(转载自张鑫旭大神)
    Js写的一个倒计时效果实例
    垂直居中的几种方案
    大图片加载优化解决方案
    DomReady实现策略
    脱离文档流
  • 原文地址:https://www.cnblogs.com/benlightning/p/4434907.html
Copyright © 2011-2022 走看看