Thanks Kurtis and Robert. My use-case is for a telecommunications application (HTTP/2 client, 5G client to be precise) which needs to send 5G (HTTP/2) requests to a server at a configurable rate (TPS). While the telecom industry very commonly use the word TPS (Transactions Per Second), I would like to control the rate within the second i.e. if the TPS is to be 2000, then I would like to spread these 2000 transactions (HTTP/2 requests) over 1 second uniformly i.e. 1 request every 500 mico-seconds which will then result in 2000 requests in that 1 second. I believed that by using a time.Ticker to fire every 500 micro-seconds, I would be able to achieve this outcome.
Is there any other way you could suggest I do this using Go ? On Monday, 31 January 2022 at 15:17:23 UTC+11 ren...@ix.netcom.com wrote: > Pretty much what Kurtis said. Low interval timers usually require > specialized constructs if not a real time OS to efficiently (or even at > all). > > On Jan 30, 2022, at 9:16 PM, envee <neeraj....@gmail.com> wrote: > > Thanks, but I am not sure how that reference solves the issue ? > > Or are you suggesting that the only way is to use Cgo and invoke usleep to > get very close to the Ticker duration specified ? > > On Monday, 31 January 2022 at 11:25:58 UTC+11 ren...@ix.netcom.com wrote: > >> See https://github.com/golang/go/issues/27707 >> >> On Jan 30, 2022, at 5:50 PM, envee <neeraj....@gmail.com> wrote: >> >> Hi All, >> >> I understand this issue has been discussed in the past, and I have seen a >> few comments from Ian and Russ Cox about this topic, but I could not arrive >> at a conclusion about how I can make the time.Ticker send me ticks at >> atleast close to the Ticker duration I specify. At the moment, I am seeing >> ticks being sent at way over the specified duration especially when I have >> sub-millisecond durations. >> With 1ms duration, the ticker seems to be quite close to the duration >> (maybe within +/-5%). I would be happier if it were within 1%, but I can >> handle that. >> >> With 1 micro-second duration, the ticker sends ticks nearly 4 times >> slower than expected. >> >> Here is my sample code >> " >> ti := time.NewTicker(1 * time.Millisecond) >> start := time.Now() >> for i := 0; i < 1000; i++ { >> <-ti.C >> } >> fmt.Printf("elapsed time = %v\n", time.Since(start)) >> " >> >> The output is usually close to 1 second as expected (close to) when using >> 1ms duration. >> elapsed time = 1.000159338s >> >> >> My code for the microsecond test is : >> " >> ti := time.NewTicker(1 * time.Microsecond) >> start := time.Now() >> for i := 0; i < 1000000; i++ { >> <-ti.C >> } >> fmt.Printf("elapsed time = %v\n", time.Since(start)) >> " >> >> With this, I get the following output which shows the elapsed time close >> to 4 seconds : >> elapsed time = 4.796662856s >> >> *Is there anyway, I can ensure ticks are sent at approximately within 5% >> of my specified duration ?* >> >> I understand from time.Ticker docs that ticks will be lost if the ticker >> handler cannot keep up with the ticker time. >> >> In the simple code above, I am literally doing very minimal work in each >> loop iteration and that is about checking the loop condition. >> So I am not sure why ticks are being lost ? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/5f55ccf9-1478-4490-a8f4-a35a5764721dn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/5f55ccf9-1478-4490-a8f4-a35a5764721dn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts...@googlegroups.com. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/efa204c2-092f-46e1-abe4-8aa5c502d986n%40googlegroups.com > > <https://groups.google.com/d/msgid/golang-nuts/efa204c2-092f-46e1-abe4-8aa5c502d986n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/3f9d1c36-4820-4555-a5f3-9721e661530bn%40googlegroups.com.