首页 > 其他分享 >对带有指针类型的切片进行循环时避坑

对带有指针类型的切片进行循环时避坑

时间:2024-10-16 16:59:30浏览次数:6  
标签:hash target sp 切片 timeout 时避 config loop 指针

func (sp *scrapePool) sync(targets []*Target) {
// 加锁
sp.mtx.Lock()
defer sp.mtx.Unlock()

var (
// target 标记
uniqueTargets = map[uint64]struct{}{}
// 采集周期
interval = time.Duration(sp.config.ScrapeInterval)
// 采集超时时间
timeout = time.Duration(sp.config.ScrapeTimeout)
limit = int(sp.config.SampleLimit)
// 重复lable是否覆盖
honorLabels = sp.config.HonorLabels
honorTimestamps = sp.config.HonorTimestamps
mrc = sp.config.MetricRelabelConfigs
)
// 遍历all队列中的所有target
for _, t := range targets {
// 赋值,避免range的坑,带指针类型的切片
t := t
// 生成对应的hash(对该hash算法感兴趣可以看下这里的源码)
hash := t.hash()
// 标记
uniqueTargets[hash] = struct{}{}
// 判断该taget是否已经在运行了。如果没有则运行该target对应的loop,将该loop加入activeTargets中
if _, ok := sp.activeTargets[hash]; !ok {
s := &targetScraper{Target: t, client: sp.client, timeout: timeout}
l := sp.newLoop(scrapeLoopOptions{
target: t,
scraper: s,
limit: limit,
honorLabels: honorLabels,
honorTimestamps: honorTimestamps,
mrc: mrc,
})

sp.activeTargets[hash] = t
sp.loops[hash] = l
// 启动该loop
go l.run(interval, timeout, nil)
} else {
// 该target对应的loop已经运行,设置最新的标签信息
sp.activeTargets[hash].SetDiscoveredLabels(t.DiscoveredLabels())
}
}

标签:hash,target,sp,切片,timeout,时避,config,loop,指针
From: https://www.cnblogs.com/cheyunhua/p/18470333

相关文章

  • 在 C 语言中通过指针访问结构体内存
    在C语言中,指针是用于引用内存地址的变量,通过指针可以有效地访问和操作内存。即使未显式创建结构体实例,只要指向的内存区域足够大且对齐方式正确,指针也能够按照特定结构体的布局访问数据。以下是这个机制的详细解读。1.指针与内存布局指针的类型(如Block*)告诉编译器如何解释......
  • 【优选算法篇】双指针的华丽探戈:深入C++算法殿堂的优雅追寻
    文章目录C++双指针详解:进阶题解与思维分析前言第一章:有效三角形的个数1.1有效三角形的个数示例1:示例2:解法一(暴力求解)解法二(排序+双指针)易错点提示代码解读第二章:和为s的两个数字2.1和为s的两个数字示例1:解法一(暴力解法)解法二(双指针-对撞指针)第三章:三......
  • C语言中的指针与内存管理:两种情况分析
    在C语言中,指针的使用和内存管理是非常重要的概念。在本文中,我们将分析两种情况:一种是通过指针修改结构体内容,另一种是错误地尝试通过指针分配新的内存。我们将详细探讨这两种情况中的内存管理问题和如何避免常见的错误。第一例:通过指针修改结构体内容以下是第一段代码:#includ......
  • 双指针大总结
    1.A-B数对P1102A-B数对-洛谷题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数\(C\),要求计算出所有满足\(A-B=C\)的数对的个数(不同位置的数字一样的......
  • 倾斜摄影切片怎么做?这种切片方式简单方便还免费!
    倾斜摄影是一种从多个角度(通常是垂直、斜45度)拍摄地面或建筑物的影像技术,通过结合这些不同视角的照片,可以生成具有真实感的三维模型。倾斜摄影通常用于城市建模、地形勘测和测绘等领域,能够准确还原建筑物和地形的立体结构。然而,倾斜摄影生成的三维数据体量庞大,直接展示时面临渲染......
  • GeoServer-发布WMTS切片服务
    转自:https://blog.csdn.net/weixin_58424264/geoServer: http://localhost:8080/geoserver/web/?1默认账号:admin密码:geoserver发布WMTS服务步骤1.新建gridsets,选择合适的层数以及坐标系   2.新建工作区  仿照别人的设置  3.新建数据存储,根据资源类型找......
  • C语言-用指针遍历二维数组
    一、1.用一级指针遍历二维数组7#include<stdio.h>89intmain(intargc,char*argv[])10{11inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};12int*p;13p=*a;14inti;15for(i=0;i<12;i++){16if(i!=0&&i%4==0)17......
  • C语言——指针全解
    目录一、指针变量  二、指针和指针类型        1、指针类型        2、指针变量大小 三、指针类型的意义        1、解引用         2、指针+-整数         3、void*指针类型 四、野指针 五、指针的运算     ......
  • 指针常量
    constchar* 是C和C++中的一种类型声明,表示一个指向常量字符的指针。具体来说,const 关键字用于修饰指针指向的数据,使得数据本身不可修改。以下是 constchar* 的详细解释:1.指针和常量指针(Pointer):指针是一个变量,用于存储内存地址。char* 表示一个指向字符类型的指针。......
  • C++中传指针和传引用的区别,各自的使用场景是什么
    在C++中,传指针和传引用都是将变量传递给函数的两种方式,但它们在语法、行为和使用场景上有一些区别。理解它们的区别和各自的适用场景是编写高效和安全代码的重要组成部分。1.传指针(PassbyPointer)指针是一种变量,它存储另一个变量的内存地址。在函数参数中使用指针,意味着将实......