Http 如何计算每秒传出的请求数?

Http 如何计算每秒传出的请求数?,http,go,Http,Go,我正在编写一个go程序,它将使用goroutines并发地发出数千个http.Get请求。这将是一个长期运行的过程,我将添加一个管理功能,它将列出有关该过程的某些统计信息 我正试图找出一个干净的方法来计算每秒我发出的请求数。我提出了一些可能的解决方案: 存储一个计数器,并有一个计时器,每隔几秒钟执行一次,计算每秒的请求数,然后重置计数器。我担心以线程安全的方式执行此操作。如果在访问此计数器之前使用互斥锁,是否会降低性能 为每个成功提出的请求保留一个时间戳列表,这样我就可以在我关心的时间段内的所有

我正在编写一个go程序,它将使用goroutines并发地发出数千个
http.Get
请求。这将是一个长期运行的过程,我将添加一个管理功能,它将列出有关该过程的某些统计信息

我正试图找出一个干净的方法来计算每秒我发出的请求数。我提出了一些可能的解决方案:

  • 存储一个计数器,并有一个计时器,每隔几秒钟执行一次,计算每秒的请求数,然后重置计数器。我担心以线程安全的方式执行此操作。如果在访问此计数器之前使用互斥锁,是否会降低性能

  • 为每个成功提出的请求保留一个时间戳列表,这样我就可以在我关心的时间段内的所有时间戳列表中向后走。我担心这个列表会越来越多,但也许我可以使用循环缓冲区

  • 以某种方式保持每秒请求的移动平均值

  • 对于我来说,计算Go程序中每秒发出的
    http.Get
    请求数的最佳方法是什么

    如果使用简单计数器,只需使用递增和(或…
    Uint64
    变体)即可安全读取和重置计数器。或者,您可以使用类似的.1。为什么在访问网络时都使用互斥锁?2.这一切都取决于你想以何种精度测量哪个数字。@Volker你说的“为什么两者都是互斥”是什么意思?我会使用一个,因为成千上万的goroutine将经常访问/更新这个号码。是解决这个问题的一个干净的惯用方法,你不必重新发明轮子。@JustinOpolony,我不应该尝试为@Volker说话,但我相信他是想说不要担心或被一个额外的互斥(或者更好,一个操作)的开销所困扰与从网络连接读/写所需的同步和开销相比(即调用
    http.Get
    )。与此相比,额外的互斥可以忽略不计。