[go] 用ticker定时器来替代循环任务

使用 time.Ticker 来定期执行检查,间隔可以根据需求调整(例如每秒检查一次)。

go 复制代码
package main

import (
    "fmt"
    "sync"
    "time"
)

var (
    gDeviceList= make(map[string]int)
    mu            sync.Mutex
    maxCheckCount = 30
)

func main() {
    // 模拟数据插入
    gDeviceList["device1"] = 0
    gDeviceList["device2"] = 0

    // 使用 goroutine 在后台处理
    go monitorDevices()

    // 模拟其他工作
    time.Sleep(5 * time.Second)

    // 打印最后剩余的设备
    mu.Lock()
    for udid, count := range gDeviceList{
        fmt.Printf("UDID: %s, Count: %d\n", udid, count)
    }
    mu.Unlock()
}

func monitorDevices() {
    ticker := time.NewTicker(1 * time.Second)
    defer ticker.Stop()

    for range ticker.C {
        mu.Lock()
        for udid, count := range gDeviceList{
            gDeviceList[udid] = count + 1

            if count > maxCheckCount {
                delete(gDeviceList, udid)
            }
        }
        mu.Unlock()
    }
}
相关推荐
h7997103 小时前
go资深之路笔记(八) 基准测试
golang·压力测试
Achou.Wang15 小时前
源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
开发语言·缓存·golang
Yeats_Liao17 小时前
Go语言技术与应用(二):分布式架构设计解析
开发语言·分布式·golang
蓝婴天使17 小时前
基于 React + Go + PostgreSQL + Redis 的管理系统开发框架
react.js·postgresql·golang
脚踏实地的大梦想家17 小时前
【Go】P6 Golang 基础:流程控制
开发语言·golang
QX_hao18 小时前
【Go】--数组和切片
后端·golang·restful
-睡到自然醒~18 小时前
提升应用性能:Go中的同步与异步处理
开发语言·后端·golang
只吃不吃香菜18 小时前
Go WebSocket 协程泄漏问题分析与解决方案
开发语言·websocket·golang
ChineHe18 小时前
Golang并发编程篇001_并发编程相关概念解释
开发语言·后端·golang
赴前尘20 小时前
Go 通道非阻塞发送:优雅地处理“通道已满”的场景
开发语言·后端·golang