Skip to content
Theme

JOB 03Reference

Benchmarks

This page compares VarMQ with other Go worker pools, Redis job queues and SQLite job queues. Every row on it is one line of the raw go test -bench output in goptics/benchmarks, and every figure is read from those rows or averaged over them. The run is from 2026-10-25, with varmq v1.10.0, at commit a0d0e0b. The page holds all 1,667 rows of that run. Each result links to its line in the raw file.

Pick a dataset and narrow it with the selects: each lane is one subject’s mean over the groups in scope, and its last column divides it by VarMQ. Press a square in the map to see one group, with a link to each of its rows in the raw file.

Worker pool, GOMAXPROCS 24, 8 and 4

The three pool files read together. A mean here averages the 24, 8 and 4 CPU runs.

Show

165 groups in scope · VarMQ leads 91, others 74 · 9 subjects

Tasks per second

tasks/s · higher is better · mean of 165 groups
  1. VarMQwon 91 of 165 4,479,925 1.00 times VarMQ, the baseline
  2. BufferedPool †won 47 of 165 3,694,917 0.82 times VarMQ, behind VarMQ
  3. ErrGroupwon 22 of 165 2,131,294 0.48 times VarMQ, behind VarMQ
  4. Gopoolwon 1 of 165 2,027,999 0.45 times VarMQ, behind VarMQ
  5. Antswon 4 of 165 1,960,521 0.44 times VarMQ, behind VarMQ
  6. GoroutinePool †won 0 of 165 1,625,000 0.36 times VarMQ, behind VarMQ
  7. Concwon 0 of 165 1,326,509 0.30 times VarMQ, behind VarMQ
  8. WorkerPoolwon 0 of 165 1,221,358 0.27 times VarMQ, behind VarMQ
  9. Pondwon 0 of 165 655,940 0.15 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

† A baseline, not a library: N goroutines reading one channel. The buffered one holds all 1M tasks.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

24 CPUs8 CPUs4 CPUs
Task · workers1 producer100 producers1K producers10K producers1M producers1 producer100 producers1K producers10K producers1M producers1 producer100 producers1K producers10K producers1M producers
Sleep10ms · 50K
Loop10 · 50K
Sleep5msLoop5 · 50K
Sleep10ms · 100K
Loop10 · 100K
Sleep5msLoop5 · 100K
Sleep10ms · 300K
Loop10 · 300K
Sleep5msLoop5 · 300K
Loop10 · 1 worker
Loop10K · 1 worker
  • VQVarMQ91
  • BPBufferedPool †47
  • EGErrGroup22
  • ANAnts4
  • GPGopool1

Where VarMQ does not win

Another subject has the fastest throughput in 74 groups of 165. VarMQ has it in 91.

  • BufferedPool † 47 groups
  • ErrGroup 22 groups
  • Ants 4 groups
  • Gopool 1 group
All 74 groups where VarMQ does not win, biggest gap first
GroupBestVarMQAhead bySource
Loop10, 1 worker, 1 producer, 24 CPUs BufferedPool † 26,076,554 5,612,142 3 of 9 4.65× 24cpu L410–418
Loop10, 1 worker, 1K producers, 24 CPUs BufferedPool † 24,944,261 5,587,181 2 of 9 4.46× 24cpu L428–436
Loop10, 1 worker, 1 producer, 8 CPUs BufferedPool † 26,148,651 6,326,035 3 of 9 4.13× 8cpu L410–418
Loop10, 1 worker, 1 producer, 4 CPUs BufferedPool † 26,202,379 6,632,332 3 of 9 3.95× 4cpu L410–418
Loop10, 1 worker, 100 producers, 8 CPUs BufferedPool † 27,854,937 7,090,918 2 of 9 3.93× 8cpu L419–427
Loop10, 1 worker, 100 producers, 24 CPUs BufferedPool † 25,921,880 6,768,459 2 of 9 3.83× 24cpu L419–427
Loop10, 1 worker, 100 producers, 4 CPUs BufferedPool † 27,380,238 7,308,651 2 of 9 3.75× 4cpu L419–427
Loop10, 1 worker, 1K producers, 4 CPUs BufferedPool † 26,829,003 7,342,679 2 of 9 3.65× 4cpu L428–436
Loop10, 1 worker, 1K producers, 8 CPUs BufferedPool † 26,084,154 7,190,233 2 of 9 3.63× 8cpu L428–436
Loop10, 1 worker, 10K producers, 8 CPUs BufferedPool † 24,737,062 7,177,970 2 of 9 3.45× 8cpu L437–445
Loop10, 1 worker, 10K producers, 4 CPUs BufferedPool † 23,643,298 7,271,060 2 of 9 3.25× 4cpu L437–445
Loop10, 1 worker, 10K producers, 24 CPUs BufferedPool † 21,230,114 6,584,676 2 of 9 3.22× 24cpu L437–445
Sleep10ms, 50K workers, 1 producer, 4 CPUs BufferedPool † 3,736,757 2,504,306 2 of 9 1.49× 4cpu L5–13
Sleep10ms, 50K workers, 1K producers, 4 CPUs BufferedPool † 3,674,940 2,481,416 2 of 9 1.48× 4cpu L23–31
Sleep10ms, 50K workers, 10K producers, 4 CPUs BufferedPool † 3,662,015 2,491,621 2 of 9 1.47× 4cpu L32–40
Sleep10ms, 50K workers, 100 producers, 4 CPUs BufferedPool † 3,673,447 2,554,864 2 of 9 1.44× 4cpu L14–22
Sleep10ms, 100K workers, 1M producers, 4 CPUs ErrGroup 1,967,247 1,373,342 6 of 9 1.43× 4cpu L176–184
Sleep10ms, 300K workers, 1M producers, 4 CPUs ErrGroup 1,951,801 1,392,523 4 of 9 1.40× 4cpu L311–319
Sleep5msLoop5, 300K workers, 1M producers, 4 CPUs ErrGroup 2,107,373 1,521,728 4 of 9 1.38× 4cpu L401–409
Sleep10ms, 50K workers, 1M producers, 4 CPUs ErrGroup 1,968,705 1,436,960 6 of 9 1.37× 4cpu L41–49
Sleep5msLoop5, 100K workers, 1M producers, 4 CPUs ErrGroup 2,040,959 1,491,073 4 of 9 1.37× 4cpu L266–274
Sleep5msLoop5, 50K workers, 1M producers, 4 CPUs ErrGroup 2,047,829 1,499,597 6 of 9 1.37× 4cpu L131–139
Sleep10ms, 50K workers, 1 producer, 8 CPUs BufferedPool † 3,939,669 3,176,393 2 of 9 1.24× 8cpu L5–13
Sleep5msLoop5, 300K workers, 1M producers, 8 CPUs ErrGroup 3,068,841 2,482,123 2 of 9 1.24× 8cpu L401–409
Sleep5msLoop5, 300K workers, 1 producer, 8 CPUs ErrGroup 2,997,183 2,459,278 2 of 9 1.22× 8cpu L365–373
Sleep10ms, 50K workers, 10K producers, 8 CPUs BufferedPool † 3,731,132 3,169,295 2 of 9 1.18× 8cpu L32–40
Loop10, 1 worker, 1M producers, 24 CPUs BufferedPool † 4,756,005 4,048,978 2 of 9 1.17× 24cpu L446–454
Sleep5msLoop5, 300K workers, 1 producer, 4 CPUs ErrGroup 2,540,219 2,180,862 3 of 9 1.16× 4cpu L365–373
Sleep10ms, 50K workers, 100 producers, 8 CPUs BufferedPool † 3,813,389 3,274,819 2 of 9 1.16× 8cpu L14–22
Sleep10ms, 50K workers, 1K producers, 8 CPUs BufferedPool † 3,800,703 3,266,799 2 of 9 1.16× 8cpu L23–31
Sleep5msLoop5, 50K workers, 100 producers, 4 CPUs BufferedPool † 3,332,321 2,873,030 2 of 9 1.16× 4cpu L104–112
Sleep10ms, 300K workers, 1 producer, 4 CPUs ErrGroup 2,282,556 1,972,243 3 of 9 1.16× 4cpu L275–283
Sleep5msLoop5, 50K workers, 10K producers, 4 CPUs BufferedPool † 3,185,706 2,771,238 2 of 9 1.15× 4cpu L122–130
Sleep10ms, 300K workers, 1 producer, 8 CPUs ErrGroup 2,784,449 2,455,963 2 of 9 1.13× 8cpu L275–283
Sleep10ms, 50K workers, 10K producers, 24 CPUs BufferedPool † 2,962,595 2,632,451 2 of 9 1.13× 24cpu L32–40
Sleep10ms, 300K workers, 100 producers, 4 CPUs Ants 2,132,405 1,900,906 3 of 9 1.12× 4cpu L284–292
Sleep5msLoop5, 300K workers, 1 producer, 24 CPUs ErrGroup 2,543,927 2,275,746 2 of 9 1.12× 24cpu L365–373
Sleep10ms, 300K workers, 1M producers, 24 CPUs ErrGroup 2,161,621 1,937,685 2 of 9 1.12× 24cpu L311–319
Loop10, 1 worker, 1M producers, 4 CPUs BufferedPool † 4,798,241 4,304,050 2 of 9 1.11× 4cpu L446–454
Sleep5msLoop5, 300K workers, 1K producers, 4 CPUs Ants 2,338,347 2,136,678 2 of 9 1.09× 4cpu L383–391
Sleep10ms, 50K workers, 100 producers, 24 CPUs BufferedPool † 3,011,339 2,771,948 2 of 9 1.09× 24cpu L14–22
Sleep5msLoop5, 50K workers, 1K producers, 4 CPUs BufferedPool † 3,101,827 2,860,632 2 of 9 1.08× 4cpu L113–121
Sleep10ms, 300K workers, 1 producer, 24 CPUs ErrGroup 2,293,517 2,135,964 2 of 9 1.07× 24cpu L275–283
Sleep10ms, 300K workers, 1K producers, 4 CPUs Ants 2,212,462 2,070,837 2 of 9 1.07× 4cpu L293–301
Sleep10ms, 50K workers, 1K producers, 24 CPUs BufferedPool † 2,915,777 2,741,551 2 of 9 1.06× 24cpu L23–31
Sleep10ms, 100K workers, 100 producers, 4 CPUs BufferedPool † 2,572,532 2,423,256 2 of 9 1.06× 4cpu L149–157
Loop10K, 1 worker, 1 producer, 8 CPUs BufferedPool † 337,903 322,978 3 of 9 1.05× 8cpu L455–463
Sleep5msLoop5, 100K workers, 1M producers, 8 CPUs ErrGroup 2,879,461 2,757,349 2 of 9 1.04× 8cpu L266–274
Sleep10ms, 50K workers, 1M producers, 8 CPUs ErrGroup 2,732,450 2,628,276 2 of 9 1.04× 8cpu L41–49
Loop10K, 1 worker, 100 producers, 24 CPUs BufferedPool † 334,515 322,322 3 of 9 1.04× 24cpu L464–472
Loop10K, 1 worker, 1 producer, 24 CPUs Gopool 336,425 324,485 3 of 9 1.04× 24cpu L455–463
Loop10K, 1 worker, 10K producers, 8 CPUs BufferedPool † 337,132 325,199 2 of 9 1.04× 8cpu L482–490
Loop10K, 1 worker, 1K producers, 8 CPUs BufferedPool † 336,500 325,224 2 of 9 1.03× 8cpu L473–481
Loop10K, 1 worker, 1K producers, 24 CPUs BufferedPool † 333,606 322,936 2 of 9 1.03× 24cpu L473–481
Loop10K, 1 worker, 1M producers, 24 CPUs BufferedPool † 322,314 312,975 2 of 9 1.03× 24cpu L491–499
Loop10K, 1 worker, 10K producers, 24 CPUs BufferedPool † 333,318 323,713 2 of 9 1.03× 24cpu L482–490
Loop10K, 1 worker, 1 producer, 4 CPUs BufferedPool † 333,826 324,401 3 of 9 1.03× 4cpu L455–463
Loop10K, 1 worker, 1K producers, 4 CPUs BufferedPool † 334,843 325,729 2 of 9 1.03× 4cpu L473–481
Loop10, 1 worker, 1M producers, 8 CPUs BufferedPool † 5,320,750 5,181,886 2 of 9 1.03× 8cpu L446–454
Loop10K, 1 worker, 1M producers, 4 CPUs BufferedPool † 333,400 325,027 3 of 9 1.03× 4cpu L491–499
Loop10K, 1 worker, 100 producers, 8 CPUs BufferedPool † 334,568 326,262 2 of 9 1.03× 8cpu L464–472
Sleep10ms, 100K workers, 1K producers, 4 CPUs BufferedPool † 2,526,768 2,464,268 2 of 9 1.03× 4cpu L158–166
Loop10K, 1 worker, 100 producers, 4 CPUs BufferedPool † 332,585 324,909 2 of 9 1.02× 4cpu L464–472
Loop10K, 1 worker, 10K producers, 4 CPUs BufferedPool † 333,216 325,666 2 of 9 1.02× 4cpu L482–490
Sleep10ms, 100K workers, 1 producer, 4 CPUs ErrGroup 2,326,813 2,277,277 2 of 9 1.02× 4cpu L140–148
Sleep5msLoop5, 100K workers, 1K producers, 4 CPUs BufferedPool † 2,737,841 2,685,087 2 of 9 1.02× 4cpu L248–256
Sleep10ms, 300K workers, 10K producers, 8 CPUs ErrGroup 2,815,102 2,766,179 2 of 9 1.02× 8cpu L302–310
Sleep10ms, 100K workers, 1M producers, 8 CPUs ErrGroup 2,675,045 2,629,661 2 of 9 1.02× 8cpu L176–184
Loop10K, 1 worker, 1M producers, 8 CPUs BufferedPool † 328,842 324,508 2 of 9 1.01× 8cpu L491–499
Sleep5msLoop5, 300K workers, 100 producers, 4 CPUs Ants 2,276,359 2,261,985 2 of 9 1.01× 4cpu L374–382
Sleep10ms, 100K workers, 10K producers, 4 CPUs BufferedPool † 2,439,078 2,423,984 2 of 9 1.01× 4cpu L167–175
Sleep10ms, 300K workers, 1M producers, 8 CPUs ErrGroup 2,669,081 2,660,367 2 of 9 1.00× 8cpu L311–319
Sleep10ms, 300K workers, 10K producers, 4 CPUs ErrGroup 2,115,244 2,108,599 2 of 9 1.00× 4cpu L302–310
Sleep5msLoop5, 300K workers, 10K producers, 4 CPUs ErrGroup 2,226,923 2,220,232 2 of 9 1.00× 4cpu L392–400
Every row behind these numbers · 165 groups
Tasks per second (tasks/s) for each group in scope. The best value of each group is marked.
GroupVarMQAntsWorkerPoolConcErrGroupGopoolGoroutinePool †BufferedPool †PondSource
Sleep10ms, 50K workers, 1 producer, 24 CPUs2,912,550 (best)1,519,070656,7651,429,4091,794,858954,5641,339,5491,537,452399,35124cpu L5–13
Sleep10ms, 50K workers, 100 producers, 24 CPUs2,771,9482,035,0611,015,6151,619,3841,582,0021,361,6531,017,6383,011,339 (best)368,80624cpu L14–22
Sleep10ms, 50K workers, 1K producers, 24 CPUs2,741,5512,077,1581,156,901586,4311,464,8321,141,372778,0112,915,777 (best)284,26324cpu L23–31
Sleep10ms, 50K workers, 10K producers, 24 CPUs2,632,4511,884,900973,489497,1781,268,6581,189,5861,137,5022,962,595 (best)415,10924cpu L32–40
Sleep10ms, 50K workers, 1M producers, 24 CPUs2,553,298 (best)1,382,534864,9471,251,8451,758,8121,403,7971,319,9591,261,415410,21824cpu L41–49
Loop10, 50K workers, 1 producer, 24 CPUs7,391,698 (best)1,990,6271,811,1221,293,9702,330,3291,342,2251,604,7381,567,348305,81724cpu L50–58
Loop10, 50K workers, 100 producers, 24 CPUs11,460,237 (best)2,480,988880,3651,231,4621,588,2232,005,8321,144,0771,069,505324,66324cpu L59–67
Loop10, 50K workers, 1K producers, 24 CPUs11,943,831 (best)2,462,5771,399,805718,0671,131,0982,423,4492,319,0562,108,059627,67524cpu L68–76
Loop10, 50K workers, 10K producers, 24 CPUs11,123,489 (best)2,097,7921,587,189716,2071,802,4302,256,8521,073,1291,048,061422,50824cpu L77–85
Loop10, 50K workers, 1M producers, 24 CPUs3,701,745 (best)2,066,346886,0191,351,2802,693,2461,992,7861,795,7311,804,391274,30624cpu L86–94
Sleep5msLoop5, 50K workers, 1 producer, 24 CPUs3,702,257 (best)1,481,031414,1581,313,2092,244,662941,503885,8991,268,019284,77424cpu L95–103
Sleep5msLoop5, 50K workers, 100 producers, 24 CPUs4,141,394 (best)2,216,414671,836829,6351,698,7871,540,4001,748,0183,077,938381,41024cpu L104–112
Sleep5msLoop5, 50K workers, 1K producers, 24 CPUs4,081,581 (best)2,186,9661,192,459536,9191,608,7591,453,572747,0963,133,797266,46924cpu L113–121
Sleep5msLoop5, 50K workers, 10K producers, 24 CPUs3,884,958 (best)1,925,4701,078,418539,8141,550,6951,387,420949,4232,806,689415,16224cpu L122–130
Sleep5msLoop5, 50K workers, 1M producers, 24 CPUs3,013,711 (best)1,354,235964,2431,324,9311,204,768935,3791,452,2451,445,972392,53624cpu L131–139
Sleep10ms, 100K workers, 1 producer, 24 CPUs3,186,940 (best)1,232,040464,3301,023,2282,244,3731,306,4821,415,2101,329,567433,48124cpu L140–148
Sleep10ms, 100K workers, 100 producers, 24 CPUs3,099,420 (best)2,128,994640,768629,4721,410,5031,520,710748,0271,235,336365,59124cpu L149–157
Sleep10ms, 100K workers, 1K producers, 24 CPUs3,070,265 (best)2,127,2431,208,889884,7891,568,3821,510,232873,0921,788,000282,14024cpu L158–166
Sleep10ms, 100K workers, 10K producers, 24 CPUs3,106,371 (best)1,916,3331,113,100447,4151,147,2001,281,530864,3722,300,995258,48924cpu L167–175
Sleep10ms, 100K workers, 1M producers, 24 CPUs2,590,761 (best)1,258,017938,9211,241,0201,822,877983,6681,251,3921,313,986413,87424cpu L176–184
Loop10, 100K workers, 1 producer, 24 CPUs7,655,402 (best)1,797,0141,780,325871,3502,452,591650,795881,7051,143,310258,07824cpu L185–193
Loop10, 100K workers, 100 producers, 24 CPUs12,148,546 (best)2,491,122885,864622,7122,484,5191,798,938748,174715,315303,21924cpu L194–202
Loop10, 100K workers, 1K producers, 24 CPUs12,226,055 (best)2,448,7651,587,293698,8921,221,7892,527,880841,209745,780302,65624cpu L203–211
Loop10, 100K workers, 10K producers, 24 CPUs10,991,630 (best)2,327,9811,429,656763,9932,076,6631,501,9821,228,318940,196359,74424cpu L212–220
Loop10, 100K workers, 1M producers, 24 CPUs4,945,904 (best)1,972,167900,8881,471,1122,688,9841,864,0321,694,4851,713,957195,79424cpu L221–229
Sleep5msLoop5, 100K workers, 1 producer, 24 CPUs3,637,486 (best)1,447,185546,9151,295,8352,216,760918,7031,049,195955,075245,53824cpu L230–238
Sleep5msLoop5, 100K workers, 100 producers, 24 CPUs4,388,983 (best)2,254,168667,374732,4381,975,4841,396,2461,435,1881,681,656406,61124cpu L239–247
Sleep5msLoop5, 100K workers, 1K producers, 24 CPUs4,142,646 (best)2,209,3611,200,520681,3861,505,5601,461,071994,6641,964,340287,31124cpu L248–256
Sleep5msLoop5, 100K workers, 10K producers, 24 CPUs4,321,934 (best)1,998,8021,095,639432,1651,843,0651,522,098892,7022,146,119350,29124cpu L257–265
Sleep5msLoop5, 100K workers, 1M producers, 24 CPUs2,441,000 (best)1,389,629974,4001,240,7562,252,7201,114,6601,309,2371,300,391356,72424cpu L266–274
Sleep10ms, 300K workers, 1 producer, 24 CPUs2,135,9641,423,911674,477905,7842,293,517 (best)1,158,7741,164,5411,279,765404,29324cpu L275–283
Sleep10ms, 300K workers, 100 producers, 24 CPUs2,641,759 (best)2,103,215730,914943,2611,168,0311,139,678778,535711,112410,14124cpu L284–292
Sleep10ms, 300K workers, 1K producers, 24 CPUs2,672,786 (best)2,092,3441,242,1381,149,9471,517,0951,482,393709,4681,087,562283,97124cpu L293–301
Sleep10ms, 300K workers, 10K producers, 24 CPUs2,581,158 (best)1,836,5571,139,974597,3561,487,5721,353,100695,951883,328292,33624cpu L302–310
Sleep10ms, 300K workers, 1M producers, 24 CPUs1,937,6851,273,929919,127978,1592,161,621 (best)659,2761,147,9851,127,933300,36124cpu L311–319
Loop10, 300K workers, 1 producer, 24 CPUs7,061,717 (best)1,926,9121,151,327730,0062,332,201774,258996,6721,000,133344,54524cpu L320–328
Loop10, 300K workers, 100 producers, 24 CPUs11,120,957 (best)2,468,320989,128568,3152,783,0192,042,220821,431786,589590,47124cpu L329–337
Loop10, 300K workers, 1K producers, 24 CPUs11,837,012 (best)2,419,5351,739,799778,0832,158,5592,376,341801,3511,334,788425,95824cpu L338–346
Loop10, 300K workers, 10K producers, 24 CPUs10,647,574 (best)2,217,0891,471,641831,0123,177,4922,714,9581,130,040945,233324,28424cpu L347–355
Loop10, 300K workers, 1M producers, 24 CPUs4,838,041 (best)1,989,109885,1051,061,0573,048,4881,944,3131,308,8761,444,907179,64024cpu L356–364
Sleep5msLoop5, 300K workers, 1 producer, 24 CPUs2,275,7461,519,060538,180930,9192,543,927 (best)1,160,2671,017,7161,242,966279,13624cpu L365–373
Sleep5msLoop5, 300K workers, 100 producers, 24 CPUs2,702,395 (best)2,213,105730,3791,078,8561,781,7231,653,0421,001,9251,237,635325,52824cpu L374–382
Sleep5msLoop5, 300K workers, 1K producers, 24 CPUs2,617,388 (best)2,206,4291,260,3671,027,5241,329,1921,254,891702,7931,137,222382,11924cpu L383–391
Sleep5msLoop5, 300K workers, 10K producers, 24 CPUs2,471,812 (best)1,951,9861,157,052582,5031,349,1371,408,464932,7521,395,710508,26724cpu L392–400
Sleep5msLoop5, 300K workers, 1M producers, 24 CPUs1,800,531 (best)1,402,851979,629997,3801,169,486634,7591,221,8711,226,829217,50624cpu L401–409
Loop10, 1 worker, 1 producer, 24 CPUs5,612,1421,582,8991,473,0023,423,7711,487,4178,177,8093,920,68326,076,554 (best)3,028,16924cpu L410–418
Loop10, 1 worker, 100 producers, 24 CPUs6,768,4592,076,506543,788463,8151,313,6424,157,265816,03425,921,880 (best)1,041,91824cpu L419–427
Loop10, 1 worker, 1K producers, 24 CPUs5,587,1811,470,470729,037504,8961,116,6522,782,2571,000,04724,944,261 (best)870,74024cpu L428–436
Loop10, 1 worker, 10K producers, 24 CPUs6,584,6761,516,219709,503625,5262,124,7763,713,8121,020,29521,230,114 (best)1,185,32124cpu L437–445
Loop10, 1 worker, 1M producers, 24 CPUs4,048,978812,5811,143,188737,7081,174,0232,731,5701,941,9714,756,005 (best)1,109,13824cpu L446–454
Loop10K, 1 worker, 1 producer, 24 CPUs324,485265,060170,583182,923264,163336,425 (best)217,878335,389298,31524cpu L455–463
Loop10K, 1 worker, 100 producers, 24 CPUs322,322263,642154,748310,680263,194316,513322,404334,515 (best)245,22824cpu L464–472
Loop10K, 1 worker, 1K producers, 24 CPUs322,936263,783153,473306,176262,053309,949318,883333,606 (best)244,32524cpu L473–481
Loop10K, 1 worker, 10K producers, 24 CPUs323,713255,670171,686304,454253,845308,782309,248333,318 (best)247,53524cpu L482–490
Loop10K, 1 worker, 1M producers, 24 CPUs312,975240,117191,623272,352236,378285,413284,754322,314 (best)255,94024cpu L491–499
Sleep10ms, 50K workers, 1 producer, 8 CPUs3,176,3931,986,231679,5631,849,2552,640,2661,839,9332,073,8803,939,669 (best)704,7648cpu L5–13
Sleep10ms, 50K workers, 100 producers, 8 CPUs3,274,8192,327,8611,569,7601,833,6192,447,9161,738,4822,131,5133,813,389 (best)710,9708cpu L14–22
Sleep10ms, 50K workers, 1K producers, 8 CPUs3,266,7992,284,9791,708,1691,615,9342,263,1401,599,2492,049,1953,800,703 (best)716,8638cpu L23–31
Sleep10ms, 50K workers, 10K producers, 8 CPUs3,169,2952,112,9591,537,8531,402,1211,838,9282,264,7402,099,6093,731,132 (best)779,4138cpu L32–40
Sleep10ms, 50K workers, 1M producers, 8 CPUs2,628,2761,790,6941,166,7111,461,9922,732,450 (best)1,655,5381,659,2811,665,211677,6408cpu L41–49
Loop10, 50K workers, 1 producer, 8 CPUs7,671,684 (best)3,311,1301,291,4982,191,7903,266,7092,139,6902,738,6222,895,918891,5158cpu L50–58
Loop10, 50K workers, 100 producers, 8 CPUs10,048,582 (best)2,785,4652,048,2572,441,8822,636,9842,339,6832,786,9474,043,435804,5968cpu L59–67
Loop10, 50K workers, 1K producers, 8 CPUs9,631,427 (best)2,710,1562,114,1932,422,5382,616,8063,319,3122,997,6972,965,094556,4468cpu L68–76
Loop10, 50K workers, 10K producers, 8 CPUs9,342,026 (best)2,559,6001,957,6541,820,8913,112,2823,348,0693,124,6972,298,151625,7878cpu L77–85
Loop10, 50K workers, 1M producers, 8 CPUs5,183,600 (best)2,493,1601,327,1881,774,2303,814,4252,028,4302,026,6012,047,610385,7138cpu L86–94
Sleep5msLoop5, 50K workers, 1 producer, 8 CPUs4,080,137 (best)2,199,664595,6681,858,4402,860,6031,938,8572,113,3042,118,268724,4258cpu L95–103
Sleep5msLoop5, 50K workers, 100 producers, 8 CPUs4,370,254 (best)2,458,7641,545,8271,829,2432,783,6241,759,6542,030,1083,658,544765,6758cpu L104–112
Sleep5msLoop5, 50K workers, 1K producers, 8 CPUs4,342,675 (best)2,394,3481,723,5811,641,4792,615,5621,638,4601,885,0463,271,588695,6708cpu L113–121
Sleep5msLoop5, 50K workers, 10K producers, 8 CPUs3,897,961 (best)2,176,7211,489,0951,308,1612,147,9162,323,8462,083,9023,830,494836,8938cpu L122–130
Sleep5msLoop5, 50K workers, 1M producers, 8 CPUs3,066,865 (best)1,820,7571,243,5401,520,1682,875,6221,742,8441,679,3131,667,937633,2358cpu L131–139
Sleep10ms, 100K workers, 1 producer, 8 CPUs3,382,564 (best)2,031,611797,0931,684,5812,771,7641,886,0081,961,9941,985,532688,8228cpu L140–148
Sleep10ms, 100K workers, 100 producers, 8 CPUs3,495,042 (best)2,325,2781,510,8551,596,9582,653,8071,798,2241,785,9893,026,245730,9268cpu L149–157
Sleep10ms, 100K workers, 1K producers, 8 CPUs3,404,792 (best)2,298,8161,611,3591,619,9522,655,5451,609,9191,809,3482,940,701868,5138cpu L158–166
Sleep10ms, 100K workers, 10K producers, 8 CPUs3,307,640 (best)2,084,8481,482,9961,378,6312,489,6941,609,5541,913,0042,660,361666,6348cpu L167–175
Sleep10ms, 100K workers, 1M producers, 8 CPUs2,629,6611,743,8091,209,2731,341,4182,675,045 (best)1,496,7471,527,0971,492,396588,5288cpu L176–184
Loop10, 100K workers, 1 producer, 8 CPUs8,016,914 (best)3,318,506915,5821,962,6753,223,1442,125,8602,315,9822,467,976879,7488cpu L185–193
Loop10, 100K workers, 100 producers, 8 CPUs9,973,951 (best)2,802,8052,263,9892,053,6402,757,5812,245,1712,303,8112,861,536800,1098cpu L194–202
Loop10, 100K workers, 1K producers, 8 CPUs9,616,461 (best)2,783,8202,068,0402,203,1842,772,6343,084,4332,330,6522,577,287864,6478cpu L203–211
Loop10, 100K workers, 10K producers, 8 CPUs9,303,365 (best)2,589,2951,830,8662,072,1313,119,8793,140,7862,473,9212,379,015779,4178cpu L212–220
Loop10, 100K workers, 1M producers, 8 CPUs5,040,936 (best)2,505,3921,257,4971,406,4733,846,9602,014,7591,925,6271,909,667284,4598cpu L221–229
Sleep5msLoop5, 100K workers, 1 producer, 8 CPUs3,734,297 (best)2,077,719679,4741,589,0362,883,4251,921,9032,052,3521,916,682730,5198cpu L230–238
Sleep5msLoop5, 100K workers, 100 producers, 8 CPUs4,111,318 (best)2,482,0531,532,2711,642,2332,685,4301,829,1441,801,0632,497,989778,6698cpu L239–247
Sleep5msLoop5, 100K workers, 1K producers, 8 CPUs4,163,080 (best)2,373,6471,716,5681,634,5492,682,9401,680,0771,870,5072,661,241753,5958cpu L248–256
Sleep5msLoop5, 100K workers, 10K producers, 8 CPUs3,983,207 (best)2,149,6281,530,0451,438,9012,702,7151,612,9351,919,2402,789,687684,1148cpu L257–265
Sleep5msLoop5, 100K workers, 1M producers, 8 CPUs2,757,3491,805,5621,225,2961,382,6582,879,461 (best)1,545,7011,560,5071,560,923630,1188cpu L266–274
Sleep10ms, 300K workers, 1 producer, 8 CPUs2,455,9632,093,774576,7381,213,3142,784,449 (best)1,855,3331,547,5761,621,264722,2648cpu L275–283
Sleep10ms, 300K workers, 100 producers, 8 CPUs2,719,832 (best)2,306,7271,484,9831,251,6952,617,4961,759,0261,476,3861,688,833942,2738cpu L284–292
Sleep10ms, 300K workers, 1K producers, 8 CPUs2,726,497 (best)2,213,6751,633,2171,302,7432,680,2431,628,2271,468,2251,746,018709,4968cpu L293–301
Sleep10ms, 300K workers, 10K producers, 8 CPUs2,766,1792,002,1531,477,3991,318,6602,815,102 (best)1,632,0261,519,3491,715,160675,0318cpu L302–310
Sleep10ms, 300K workers, 1M producers, 8 CPUs2,660,3671,747,8751,173,2501,153,4332,669,081 (best)748,2951,326,9061,325,233320,4068cpu L311–319
Loop10, 300K workers, 1 producer, 8 CPUs7,731,116 (best)3,256,1711,115,3851,383,1623,147,9002,043,3141,752,5002,041,223885,0638cpu L320–328
Loop10, 300K workers, 100 producers, 8 CPUs9,990,429 (best)2,788,7182,115,6811,566,9532,884,2602,312,3041,802,2481,927,430815,8608cpu L329–337
Loop10, 300K workers, 1K producers, 8 CPUs9,748,598 (best)2,723,6202,071,1941,612,6492,961,0103,133,6471,722,2041,898,363938,0498cpu L338–346
Loop10, 300K workers, 10K producers, 8 CPUs9,514,309 (best)2,597,0261,988,2611,593,1713,787,7893,325,4011,565,7051,829,661547,7048cpu L347–355
Loop10, 300K workers, 1M producers, 8 CPUs5,112,507 (best)2,515,6071,297,0761,326,9603,819,5152,005,2561,572,7451,643,865183,9428cpu L356–364
Sleep5msLoop5, 300K workers, 1 producer, 8 CPUs2,459,2782,248,233882,2461,211,7962,997,183 (best)1,896,4571,575,6171,717,074763,7748cpu L365–373
Sleep5msLoop5, 300K workers, 100 producers, 8 CPUs2,742,270 (best)2,438,9001,539,0051,261,4482,634,2121,799,7081,481,6431,777,802802,1178cpu L374–382
Sleep5msLoop5, 300K workers, 1K producers, 8 CPUs2,804,855 (best)2,384,0871,682,3701,293,5082,709,6181,660,9921,507,3171,703,386769,3078cpu L383–391
Sleep5msLoop5, 300K workers, 10K producers, 8 CPUs2,989,275 (best)2,164,4181,508,1851,320,2032,773,5161,647,1671,517,7621,799,994673,9788cpu L392–400
Sleep5msLoop5, 300K workers, 1M producers, 8 CPUs2,482,1231,834,4651,222,7471,214,8763,068,841 (best)1,070,7991,357,2131,351,918357,0148cpu L401–409
Loop10, 1 worker, 1 producer, 8 CPUs6,326,0351,708,6341,477,7814,029,7482,505,97711,383,8213,830,59626,148,651 (best)2,783,1708cpu L410–418
Loop10, 1 worker, 100 producers, 8 CPUs7,090,9181,829,2841,257,5692,485,982983,8824,734,9762,661,37427,854,937 (best)1,580,7768cpu L419–427
Loop10, 1 worker, 1K producers, 8 CPUs7,190,2331,164,781950,9481,991,5431,976,9664,724,1643,535,45626,084,154 (best)1,564,2458cpu L428–436
Loop10, 1 worker, 10K producers, 8 CPUs7,177,9701,587,6421,608,2071,347,437826,1604,376,1332,947,09124,737,062 (best)1,568,0778cpu L437–445
Loop10, 1 worker, 1M producers, 8 CPUs5,181,886802,4511,151,5481,323,3681,266,0373,965,1712,352,3585,320,750 (best)1,283,9978cpu L446–454
Loop10K, 1 worker, 1 producer, 8 CPUs322,978262,550150,606206,440264,605336,341220,928337,903 (best)299,6288cpu L455–463
Loop10K, 1 worker, 100 producers, 8 CPUs326,262263,467173,781307,338268,565314,035320,871334,568 (best)278,4768cpu L464–472
Loop10K, 1 worker, 1K producers, 8 CPUs325,224263,508152,058302,173262,424316,598321,028336,500 (best)277,6818cpu L473–481
Loop10K, 1 worker, 10K producers, 8 CPUs325,199256,045202,793296,590255,972318,011313,400337,132 (best)271,4268cpu L482–490
Loop10K, 1 worker, 1M producers, 8 CPUs324,508268,194192,389284,650241,213322,427295,566328,842 (best)260,4468cpu L491–499
Sleep10ms, 50K workers, 1 producer, 4 CPUs2,504,3061,913,2161,183,1211,883,2932,253,8502,215,6002,024,3793,736,757 (best)623,1834cpu L5–13
Sleep10ms, 50K workers, 100 producers, 4 CPUs2,554,8642,177,4041,619,4901,725,8212,110,1372,021,5651,921,1553,673,447 (best)654,6484cpu L14–22
Sleep10ms, 50K workers, 1K producers, 4 CPUs2,481,4162,237,6041,591,3481,644,0582,066,1291,712,7811,915,1213,674,940 (best)664,5804cpu L23–31
Sleep10ms, 50K workers, 10K producers, 4 CPUs2,491,6211,920,7821,452,2881,454,4611,913,1172,175,6902,113,9213,662,015 (best)750,2544cpu L32–40
Sleep10ms, 50K workers, 1M producers, 4 CPUs1,436,9601,517,0661,042,0721,398,2671,968,705 (best)1,883,4091,510,1711,544,148653,7924cpu L41–49
Loop10, 50K workers, 1 producer, 4 CPUs8,974,684 (best)3,663,2151,557,5532,427,8423,588,2682,604,3652,880,1212,932,268854,8654cpu L50–58
Loop10, 50K workers, 100 producers, 4 CPUs9,414,707 (best)2,909,9062,280,6602,440,2722,610,2442,293,8292,663,6004,692,294882,4004cpu L59–67
Loop10, 50K workers, 1K producers, 4 CPUs9,242,992 (best)2,884,8792,111,8162,562,4572,723,8932,553,6152,954,3283,428,164821,6614cpu L68–76
Loop10, 50K workers, 10K producers, 4 CPUs9,100,058 (best)2,713,5621,927,6112,772,2043,016,2962,652,4573,405,3483,249,114766,8494cpu L77–85
Loop10, 50K workers, 1M producers, 4 CPUs4,078,666 (best)2,728,6151,365,8791,726,1263,757,4272,399,1192,076,8882,168,784707,3104cpu L86–94
Sleep5msLoop5, 50K workers, 1 producer, 4 CPUs2,683,120 (best)2,188,8311,397,1441,827,4672,548,1922,230,8501,993,7572,020,323703,8134cpu L95–103
Sleep5msLoop5, 50K workers, 100 producers, 4 CPUs2,873,0302,365,3181,601,6061,628,0282,082,0711,916,4771,803,2993,332,321 (best)724,1894cpu L104–112
Sleep5msLoop5, 50K workers, 1K producers, 4 CPUs2,860,6322,316,9291,595,2461,677,8682,129,0811,529,9431,871,6923,101,827 (best)750,6824cpu L113–121
Sleep5msLoop5, 50K workers, 10K producers, 4 CPUs2,771,2381,979,8681,393,4301,437,5492,034,4522,113,0582,032,7823,185,706 (best)792,1674cpu L122–130
Sleep5msLoop5, 50K workers, 1M producers, 4 CPUs1,499,5971,631,6791,029,4381,386,1092,047,829 (best)1,957,1751,543,4321,542,083649,2094cpu L131–139
Sleep10ms, 100K workers, 1 producer, 4 CPUs2,277,2771,929,5361,344,5981,635,2952,326,813 (best)2,213,2911,752,7241,778,211621,0734cpu L140–148
Sleep10ms, 100K workers, 100 producers, 4 CPUs2,423,2562,235,9571,544,8551,439,4831,902,9912,016,2001,538,4962,572,532 (best)676,4644cpu L149–157
Sleep10ms, 100K workers, 1K producers, 4 CPUs2,464,2682,161,7871,573,4921,526,2741,990,9951,593,5681,629,1402,526,768 (best)667,4014cpu L158–166
Sleep10ms, 100K workers, 10K producers, 4 CPUs2,423,9841,901,6251,393,1221,427,6412,150,4161,599,4491,757,4592,439,078 (best)813,0164cpu L167–175
Sleep10ms, 100K workers, 1M producers, 4 CPUs1,373,3421,482,7581,004,0841,289,6241,967,247 (best)1,870,1841,414,2721,411,968591,2494cpu L176–184
Loop10, 100K workers, 1 producer, 4 CPUs8,822,850 (best)3,695,054999,5472,203,4063,614,5162,526,5632,594,5062,748,426887,4934cpu L185–193
Loop10, 100K workers, 100 producers, 4 CPUs9,073,531 (best)2,850,1102,254,0062,176,8562,595,7112,334,2072,352,5622,934,572889,2934cpu L194–202
Loop10, 100K workers, 1K producers, 4 CPUs8,963,968 (best)2,823,7952,092,5932,162,9662,860,4592,605,7632,411,8162,778,263819,8854cpu L203–211
Loop10, 100K workers, 10K producers, 4 CPUs8,741,077 (best)2,712,1491,878,6642,321,1163,242,4042,619,0152,967,8022,785,151769,0064cpu L212–220
Loop10, 100K workers, 1M producers, 4 CPUs4,085,856 (best)2,712,5801,367,8331,491,6903,796,3752,379,8671,962,0922,047,578445,4054cpu L221–229
Sleep5msLoop5, 100K workers, 1 producer, 4 CPUs2,588,982 (best)2,177,3721,266,8181,678,7432,534,7522,282,1091,830,3251,874,953713,3494cpu L230–238
Sleep5msLoop5, 100K workers, 100 producers, 4 CPUs2,675,082 (best)2,369,5451,615,6561,476,9841,919,2441,911,9841,558,2962,363,042731,7754cpu L239–247
Sleep5msLoop5, 100K workers, 1K producers, 4 CPUs2,685,0872,325,6821,589,7781,586,3902,003,6711,785,4871,631,0382,737,841 (best)698,1384cpu L248–256
Sleep5msLoop5, 100K workers, 10K producers, 4 CPUs2,612,762 (best)1,962,6301,441,3481,462,8212,156,8601,675,2461,804,5502,345,062842,5794cpu L257–265
Sleep5msLoop5, 100K workers, 1M producers, 4 CPUs1,491,0731,672,6731,036,4741,342,9392,040,959 (best)1,947,0891,410,1871,459,386578,6724cpu L266–274
Sleep10ms, 300K workers, 1 producer, 4 CPUs1,972,2431,895,1031,400,1811,259,5922,282,556 (best)2,114,4101,449,0941,528,653619,5924cpu L275–283
Sleep10ms, 300K workers, 100 producers, 4 CPUs1,900,9062,132,405 (best)1,549,6041,165,9481,843,3221,816,2481,295,5882,019,173681,0274cpu L284–292
Sleep10ms, 300K workers, 1K producers, 4 CPUs2,070,8372,212,462 (best)1,531,3331,222,4191,940,5761,344,6061,309,0231,682,078728,1954cpu L293–301
Sleep10ms, 300K workers, 10K producers, 4 CPUs2,108,5991,899,8761,378,3671,262,6762,115,244 (best)1,526,6511,455,9831,683,873609,1064cpu L302–310
Sleep10ms, 300K workers, 1M producers, 4 CPUs1,392,5231,483,4171,017,5601,082,7281,951,801 (best)1,875,4491,210,4271,254,215400,0284cpu L311–319
Loop10, 300K workers, 1 producer, 4 CPUs8,904,451 (best)3,691,593876,2631,587,8283,559,9902,486,2492,030,8572,167,295880,4994cpu L320–328
Loop10, 300K workers, 100 producers, 4 CPUs9,540,875 (best)2,884,6752,303,5451,512,6102,725,5202,314,5531,763,4382,057,987877,6994cpu L329–337
Loop10, 300K workers, 1K producers, 4 CPUs8,864,308 (best)2,880,7632,139,9061,525,2422,817,0872,411,7911,891,4271,864,496821,2284cpu L338–346
Loop10, 300K workers, 10K producers, 4 CPUs8,823,550 (best)2,649,0411,937,7961,600,8223,558,4892,536,0541,900,0951,914,892772,3124cpu L347–355
Loop10, 300K workers, 1M producers, 4 CPUs4,006,494 (best)2,774,2041,380,8121,501,4983,906,7692,394,6711,659,2671,691,046404,8364cpu L356–364
Sleep5msLoop5, 300K workers, 1 producer, 4 CPUs2,180,8622,158,3721,469,8281,300,4352,540,219 (best)2,267,6991,485,3051,568,345697,2954cpu L365–373
Sleep5msLoop5, 300K workers, 100 producers, 4 CPUs2,261,9852,276,359 (best)1,601,3311,169,3401,899,6211,968,9191,286,9941,614,006727,4074cpu L374–382
Sleep5msLoop5, 300K workers, 1K producers, 4 CPUs2,136,6782,338,347 (best)1,562,4461,195,5591,985,4451,721,6491,337,5281,588,406700,5504cpu L383–391
Sleep5msLoop5, 300K workers, 10K producers, 4 CPUs2,220,2321,939,9391,425,9251,234,4562,226,923 (best)1,448,6101,441,5741,684,125637,8654cpu L392–400
Sleep5msLoop5, 300K workers, 1M producers, 4 CPUs1,521,7281,645,2701,037,6571,156,7072,107,373 (best)1,896,8431,204,2191,270,588372,7324cpu L401–409
Loop10, 1 worker, 1 producer, 4 CPUs6,632,3321,242,2261,769,6912,090,6011,341,60111,813,0213,692,38526,202,379 (best)2,773,5484cpu L410–418
Loop10, 1 worker, 100 producers, 4 CPUs7,308,6511,696,6331,712,3543,028,2652,482,5474,781,5705,785,34327,380,238 (best)1,733,1814cpu L419–427
Loop10, 1 worker, 1K producers, 4 CPUs7,342,6791,461,3921,494,4502,709,9952,371,5714,789,0043,910,77226,829,003 (best)1,686,8094cpu L428–436
Loop10, 1 worker, 10K producers, 4 CPUs7,271,0601,402,0851,337,6442,115,8811,302,6254,927,4313,558,88823,643,298 (best)1,705,7794cpu L437–445
Loop10, 1 worker, 1M producers, 4 CPUs4,304,050895,5931,349,3661,352,9131,366,0163,808,8822,519,0204,798,241 (best)1,530,2774cpu L446–454
Loop10K, 1 worker, 1 producer, 4 CPUs324,401262,078179,912217,314268,953330,298205,916333,826 (best)300,0714cpu L455–463
Loop10K, 1 worker, 100 producers, 4 CPUs324,909265,614186,457317,155262,930318,468322,479332,585 (best)282,1644cpu L464–472
Loop10K, 1 worker, 1K producers, 4 CPUs325,729263,156161,846313,304264,692310,645321,535334,843 (best)280,0224cpu L473–481
Loop10K, 1 worker, 10K producers, 4 CPUs325,666253,377228,233305,421252,112312,945311,607333,216 (best)280,1094cpu L482–490
Loop10K, 1 worker, 1M producers, 4 CPUs325,027261,287186,733283,844250,315329,648304,900333,400 (best)282,8914cpu L491–499
Run detailsgo test command, machine, versions
shcd pool && go test -run xxx -bench 'Tasks' -cpu 24,8,4 -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
GOMAXPROCS
24, 8, 4

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
antsv2.12.1
workerpoolv1.2.2
concv0.3.0
x/sync (errgroup)v0.24.0
bytedance/gopkg (gopool)v0.1.4
pondv2.7.2

Worker pool, GOMAXPROCS 24

Nine pools, 1M tasks per run.

Show

55 groups in scope · VarMQ leads 39, others 16 · 9 subjects

Tasks per second

tasks/s · higher is better · mean of 55 groups
  1. VarMQwon 39 of 55 4,719,281 1.00 times VarMQ, the baseline
  2. BufferedPool †won 12 of 55 3,158,583 0.67 times VarMQ, behind VarMQ
  3. Antswon 0 of 55 1,744,569 0.37 times VarMQ, behind VarMQ
  4. ErrGroupwon 3 of 55 1,698,742 0.36 times VarMQ, behind VarMQ
  5. Gopoolwon 1 of 55 1,610,290 0.34 times VarMQ, behind VarMQ
  6. GoroutinePool †won 0 of 55 1,093,148 0.23 times VarMQ, behind VarMQ
  7. WorkerPoolwon 0 of 55 946,147 0.20 times VarMQ, behind VarMQ
  8. Concwon 0 of 55 883,068 0.19 times VarMQ, behind VarMQ
  9. Pondwon 0 of 55 439,778 0.09 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

† A baseline, not a library: N goroutines reading one channel. The buffered one holds all 1M tasks.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

Task · workers1 producer100 producers1K producers10K producers1M producers
Sleep10ms · 50K
Loop10 · 50K
Sleep5msLoop5 · 50K
Sleep10ms · 100K
Loop10 · 100K
Sleep5msLoop5 · 100K
Sleep10ms · 300K
Loop10 · 300K
Sleep5msLoop5 · 300K
Loop10 · 1 worker
Loop10K · 1 worker
  • VQVarMQ39
  • BPBufferedPool †12
  • EGErrGroup3
  • GPGopool1

Where VarMQ does not win

Another subject has the fastest throughput in 16 groups of 55. VarMQ has it in 39.

  • BufferedPool † 12 groups
  • ErrGroup 3 groups
  • Gopool 1 group
All 16 groups where VarMQ does not win, biggest gap first
GroupBestVarMQAhead bySource
Loop10, 1 worker, 1 producer BufferedPool † 26,076,554 5,612,142 3 of 9 4.65× L410–418
Loop10, 1 worker, 1K producers BufferedPool † 24,944,261 5,587,181 2 of 9 4.46× L428–436
Loop10, 1 worker, 100 producers BufferedPool † 25,921,880 6,768,459 2 of 9 3.83× L419–427
Loop10, 1 worker, 10K producers BufferedPool † 21,230,114 6,584,676 2 of 9 3.22× L437–445
Loop10, 1 worker, 1M producers BufferedPool † 4,756,005 4,048,978 2 of 9 1.17× L446–454
Sleep10ms, 50K workers, 10K producers BufferedPool † 2,962,595 2,632,451 2 of 9 1.13× L32–40
Sleep5msLoop5, 300K workers, 1 producer ErrGroup 2,543,927 2,275,746 2 of 9 1.12× L365–373
Sleep10ms, 300K workers, 1M producers ErrGroup 2,161,621 1,937,685 2 of 9 1.12× L311–319
Sleep10ms, 50K workers, 100 producers BufferedPool † 3,011,339 2,771,948 2 of 9 1.09× L14–22
Sleep10ms, 300K workers, 1 producer ErrGroup 2,293,517 2,135,964 2 of 9 1.07× L275–283
Sleep10ms, 50K workers, 1K producers BufferedPool † 2,915,777 2,741,551 2 of 9 1.06× L23–31
Loop10K, 1 worker, 100 producers BufferedPool † 334,515 322,322 3 of 9 1.04× L464–472
Loop10K, 1 worker, 1 producer Gopool 336,425 324,485 3 of 9 1.04× L455–463
Loop10K, 1 worker, 1K producers BufferedPool † 333,606 322,936 2 of 9 1.03× L473–481
Loop10K, 1 worker, 1M producers BufferedPool † 322,314 312,975 2 of 9 1.03× L491–499
Loop10K, 1 worker, 10K producers BufferedPool † 333,318 323,713 2 of 9 1.03× L482–490
Every row behind these numbers · 55 groups
Tasks per second (tasks/s) for each group in scope. The best value of each group is marked.
GroupVarMQAntsWorkerPoolConcErrGroupGopoolGoroutinePool †BufferedPool †PondSource
Sleep10ms, 50K workers, 1 producer2,912,550 (best)1,519,070656,7651,429,4091,794,858954,5641,339,5491,537,452399,351L5–13
Sleep10ms, 50K workers, 100 producers2,771,9482,035,0611,015,6151,619,3841,582,0021,361,6531,017,6383,011,339 (best)368,806L14–22
Sleep10ms, 50K workers, 1K producers2,741,5512,077,1581,156,901586,4311,464,8321,141,372778,0112,915,777 (best)284,263L23–31
Sleep10ms, 50K workers, 10K producers2,632,4511,884,900973,489497,1781,268,6581,189,5861,137,5022,962,595 (best)415,109L32–40
Sleep10ms, 50K workers, 1M producers2,553,298 (best)1,382,534864,9471,251,8451,758,8121,403,7971,319,9591,261,415410,218L41–49
Loop10, 50K workers, 1 producer7,391,698 (best)1,990,6271,811,1221,293,9702,330,3291,342,2251,604,7381,567,348305,817L50–58
Loop10, 50K workers, 100 producers11,460,237 (best)2,480,988880,3651,231,4621,588,2232,005,8321,144,0771,069,505324,663L59–67
Loop10, 50K workers, 1K producers11,943,831 (best)2,462,5771,399,805718,0671,131,0982,423,4492,319,0562,108,059627,675L68–76
Loop10, 50K workers, 10K producers11,123,489 (best)2,097,7921,587,189716,2071,802,4302,256,8521,073,1291,048,061422,508L77–85
Loop10, 50K workers, 1M producers3,701,745 (best)2,066,346886,0191,351,2802,693,2461,992,7861,795,7311,804,391274,306L86–94
Sleep5msLoop5, 50K workers, 1 producer3,702,257 (best)1,481,031414,1581,313,2092,244,662941,503885,8991,268,019284,774L95–103
Sleep5msLoop5, 50K workers, 100 producers4,141,394 (best)2,216,414671,836829,6351,698,7871,540,4001,748,0183,077,938381,410L104–112
Sleep5msLoop5, 50K workers, 1K producers4,081,581 (best)2,186,9661,192,459536,9191,608,7591,453,572747,0963,133,797266,469L113–121
Sleep5msLoop5, 50K workers, 10K producers3,884,958 (best)1,925,4701,078,418539,8141,550,6951,387,420949,4232,806,689415,162L122–130
Sleep5msLoop5, 50K workers, 1M producers3,013,711 (best)1,354,235964,2431,324,9311,204,768935,3791,452,2451,445,972392,536L131–139
Sleep10ms, 100K workers, 1 producer3,186,940 (best)1,232,040464,3301,023,2282,244,3731,306,4821,415,2101,329,567433,481L140–148
Sleep10ms, 100K workers, 100 producers3,099,420 (best)2,128,994640,768629,4721,410,5031,520,710748,0271,235,336365,591L149–157
Sleep10ms, 100K workers, 1K producers3,070,265 (best)2,127,2431,208,889884,7891,568,3821,510,232873,0921,788,000282,140L158–166
Sleep10ms, 100K workers, 10K producers3,106,371 (best)1,916,3331,113,100447,4151,147,2001,281,530864,3722,300,995258,489L167–175
Sleep10ms, 100K workers, 1M producers2,590,761 (best)1,258,017938,9211,241,0201,822,877983,6681,251,3921,313,986413,874L176–184
Loop10, 100K workers, 1 producer7,655,402 (best)1,797,0141,780,325871,3502,452,591650,795881,7051,143,310258,078L185–193
Loop10, 100K workers, 100 producers12,148,546 (best)2,491,122885,864622,7122,484,5191,798,938748,174715,315303,219L194–202
Loop10, 100K workers, 1K producers12,226,055 (best)2,448,7651,587,293698,8921,221,7892,527,880841,209745,780302,656L203–211
Loop10, 100K workers, 10K producers10,991,630 (best)2,327,9811,429,656763,9932,076,6631,501,9821,228,318940,196359,744L212–220
Loop10, 100K workers, 1M producers4,945,904 (best)1,972,167900,8881,471,1122,688,9841,864,0321,694,4851,713,957195,794L221–229
Sleep5msLoop5, 100K workers, 1 producer3,637,486 (best)1,447,185546,9151,295,8352,216,760918,7031,049,195955,075245,538L230–238
Sleep5msLoop5, 100K workers, 100 producers4,388,983 (best)2,254,168667,374732,4381,975,4841,396,2461,435,1881,681,656406,611L239–247
Sleep5msLoop5, 100K workers, 1K producers4,142,646 (best)2,209,3611,200,520681,3861,505,5601,461,071994,6641,964,340287,311L248–256
Sleep5msLoop5, 100K workers, 10K producers4,321,934 (best)1,998,8021,095,639432,1651,843,0651,522,098892,7022,146,119350,291L257–265
Sleep5msLoop5, 100K workers, 1M producers2,441,000 (best)1,389,629974,4001,240,7562,252,7201,114,6601,309,2371,300,391356,724L266–274
Sleep10ms, 300K workers, 1 producer2,135,9641,423,911674,477905,7842,293,517 (best)1,158,7741,164,5411,279,765404,293L275–283
Sleep10ms, 300K workers, 100 producers2,641,759 (best)2,103,215730,914943,2611,168,0311,139,678778,535711,112410,141L284–292
Sleep10ms, 300K workers, 1K producers2,672,786 (best)2,092,3441,242,1381,149,9471,517,0951,482,393709,4681,087,562283,971L293–301
Sleep10ms, 300K workers, 10K producers2,581,158 (best)1,836,5571,139,974597,3561,487,5721,353,100695,951883,328292,336L302–310
Sleep10ms, 300K workers, 1M producers1,937,6851,273,929919,127978,1592,161,621 (best)659,2761,147,9851,127,933300,361L311–319
Loop10, 300K workers, 1 producer7,061,717 (best)1,926,9121,151,327730,0062,332,201774,258996,6721,000,133344,545L320–328
Loop10, 300K workers, 100 producers11,120,957 (best)2,468,320989,128568,3152,783,0192,042,220821,431786,589590,471L329–337
Loop10, 300K workers, 1K producers11,837,012 (best)2,419,5351,739,799778,0832,158,5592,376,341801,3511,334,788425,958L338–346
Loop10, 300K workers, 10K producers10,647,574 (best)2,217,0891,471,641831,0123,177,4922,714,9581,130,040945,233324,284L347–355
Loop10, 300K workers, 1M producers4,838,041 (best)1,989,109885,1051,061,0573,048,4881,944,3131,308,8761,444,907179,640L356–364
Sleep5msLoop5, 300K workers, 1 producer2,275,7461,519,060538,180930,9192,543,927 (best)1,160,2671,017,7161,242,966279,136L365–373
Sleep5msLoop5, 300K workers, 100 producers2,702,395 (best)2,213,105730,3791,078,8561,781,7231,653,0421,001,9251,237,635325,528L374–382
Sleep5msLoop5, 300K workers, 1K producers2,617,388 (best)2,206,4291,260,3671,027,5241,329,1921,254,891702,7931,137,222382,119L383–391
Sleep5msLoop5, 300K workers, 10K producers2,471,812 (best)1,951,9861,157,052582,5031,349,1371,408,464932,7521,395,710508,267L392–400
Sleep5msLoop5, 300K workers, 1M producers1,800,531 (best)1,402,851979,629997,3801,169,486634,7591,221,8711,226,829217,506L401–409
Loop10, 1 worker, 1 producer5,612,1421,582,8991,473,0023,423,7711,487,4178,177,8093,920,68326,076,554 (best)3,028,169L410–418
Loop10, 1 worker, 100 producers6,768,4592,076,506543,788463,8151,313,6424,157,265816,03425,921,880 (best)1,041,918L419–427
Loop10, 1 worker, 1K producers5,587,1811,470,470729,037504,8961,116,6522,782,2571,000,04724,944,261 (best)870,740L428–436
Loop10, 1 worker, 10K producers6,584,6761,516,219709,503625,5262,124,7763,713,8121,020,29521,230,114 (best)1,185,321L437–445
Loop10, 1 worker, 1M producers4,048,978812,5811,143,188737,7081,174,0232,731,5701,941,9714,756,005 (best)1,109,138L446–454
Loop10K, 1 worker, 1 producer324,485265,060170,583182,923264,163336,425 (best)217,878335,389298,315L455–463
Loop10K, 1 worker, 100 producers322,322263,642154,748310,680263,194316,513322,404334,515 (best)245,228L464–472
Loop10K, 1 worker, 1K producers322,936263,783153,473306,176262,053309,949318,883333,606 (best)244,325L473–481
Loop10K, 1 worker, 10K producers323,713255,670171,686304,454253,845308,782309,248333,318 (best)247,535L482–490
Loop10K, 1 worker, 1M producers312,975240,117191,623272,352236,378285,413284,754322,314 (best)255,940L491–499
Run detailsgo test command, machine, versions
shcd pool && go test -run xxx -bench 'Tasks' -cpu 24 -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
GOMAXPROCS
24

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
antsv2.12.1
workerpoolv1.2.2
concv0.3.0
x/sync (errgroup)v0.24.0
bytedance/gopkg (gopool)v0.1.4
pondv2.7.2

Worker pool, GOMAXPROCS 8

The same matrix with GOMAXPROCS 8.

Show

55 groups in scope · VarMQ leads 33, others 22 · 9 subjects

Tasks per second

tasks/s · higher is better · mean of 55 groups
  1. VarMQwon 33 of 55 4,683,021 1.00 times VarMQ, the baseline
  2. BufferedPool †won 14 of 55 3,983,311 0.85 times VarMQ, behind VarMQ
  3. ErrGroupwon 8 of 55 2,484,641 0.53 times VarMQ, behind VarMQ
  4. Gopoolwon 0 of 55 2,192,502 0.47 times VarMQ, behind VarMQ
  5. Antswon 0 of 55 2,081,951 0.44 times VarMQ, behind VarMQ
  6. GoroutinePool †won 0 of 55 1,873,143 0.40 times VarMQ, behind VarMQ
  7. Concwon 0 of 55 1,537,793 0.33 times VarMQ, behind VarMQ
  8. WorkerPoolwon 0 of 55 1,322,094 0.28 times VarMQ, behind VarMQ
  9. Pondwon 0 of 55 754,775 0.16 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

† A baseline, not a library: N goroutines reading one channel. The buffered one holds all 1M tasks.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

Task · workers1 producer100 producers1K producers10K producers1M producers
Sleep10ms · 50K
Loop10 · 50K
Sleep5msLoop5 · 50K
Sleep10ms · 100K
Loop10 · 100K
Sleep5msLoop5 · 100K
Sleep10ms · 300K
Loop10 · 300K
Sleep5msLoop5 · 300K
Loop10 · 1 worker
Loop10K · 1 worker
  • VQVarMQ33
  • BPBufferedPool †14
  • EGErrGroup8

Where VarMQ does not win

Another subject has the fastest throughput in 22 groups of 55. VarMQ has it in 33.

  • BufferedPool † 14 groups
  • ErrGroup 8 groups
All 22 groups where VarMQ does not win, biggest gap first
GroupBestVarMQAhead bySource
Loop10, 1 worker, 1 producer BufferedPool † 26,148,651 6,326,035 3 of 9 4.13× L410–418
Loop10, 1 worker, 100 producers BufferedPool † 27,854,937 7,090,918 2 of 9 3.93× L419–427
Loop10, 1 worker, 1K producers BufferedPool † 26,084,154 7,190,233 2 of 9 3.63× L428–436
Loop10, 1 worker, 10K producers BufferedPool † 24,737,062 7,177,970 2 of 9 3.45× L437–445
Sleep10ms, 50K workers, 1 producer BufferedPool † 3,939,669 3,176,393 2 of 9 1.24× L5–13
Sleep5msLoop5, 300K workers, 1M producers ErrGroup 3,068,841 2,482,123 2 of 9 1.24× L401–409
Sleep5msLoop5, 300K workers, 1 producer ErrGroup 2,997,183 2,459,278 2 of 9 1.22× L365–373
Sleep10ms, 50K workers, 10K producers BufferedPool † 3,731,132 3,169,295 2 of 9 1.18× L32–40
Sleep10ms, 50K workers, 100 producers BufferedPool † 3,813,389 3,274,819 2 of 9 1.16× L14–22
Sleep10ms, 50K workers, 1K producers BufferedPool † 3,800,703 3,266,799 2 of 9 1.16× L23–31
Sleep10ms, 300K workers, 1 producer ErrGroup 2,784,449 2,455,963 2 of 9 1.13× L275–283
Loop10K, 1 worker, 1 producer BufferedPool † 337,903 322,978 3 of 9 1.05× L455–463
Sleep5msLoop5, 100K workers, 1M producers ErrGroup 2,879,461 2,757,349 2 of 9 1.04× L266–274
Sleep10ms, 50K workers, 1M producers ErrGroup 2,732,450 2,628,276 2 of 9 1.04× L41–49
Loop10K, 1 worker, 10K producers BufferedPool † 337,132 325,199 2 of 9 1.04× L482–490
Loop10K, 1 worker, 1K producers BufferedPool † 336,500 325,224 2 of 9 1.03× L473–481
Loop10, 1 worker, 1M producers BufferedPool † 5,320,750 5,181,886 2 of 9 1.03× L446–454
Loop10K, 1 worker, 100 producers BufferedPool † 334,568 326,262 2 of 9 1.03× L464–472
Sleep10ms, 300K workers, 10K producers ErrGroup 2,815,102 2,766,179 2 of 9 1.02× L302–310
Sleep10ms, 100K workers, 1M producers ErrGroup 2,675,045 2,629,661 2 of 9 1.02× L176–184
Loop10K, 1 worker, 1M producers BufferedPool † 328,842 324,508 2 of 9 1.01× L491–499
Sleep10ms, 300K workers, 1M producers ErrGroup 2,669,081 2,660,367 2 of 9 1.00× L311–319
Every row behind these numbers · 55 groups
Tasks per second (tasks/s) for each group in scope. The best value of each group is marked.
GroupVarMQAntsWorkerPoolConcErrGroupGopoolGoroutinePool †BufferedPool †PondSource
Sleep10ms, 50K workers, 1 producer3,176,3931,986,231679,5631,849,2552,640,2661,839,9332,073,8803,939,669 (best)704,764L5–13
Sleep10ms, 50K workers, 100 producers3,274,8192,327,8611,569,7601,833,6192,447,9161,738,4822,131,5133,813,389 (best)710,970L14–22
Sleep10ms, 50K workers, 1K producers3,266,7992,284,9791,708,1691,615,9342,263,1401,599,2492,049,1953,800,703 (best)716,863L23–31
Sleep10ms, 50K workers, 10K producers3,169,2952,112,9591,537,8531,402,1211,838,9282,264,7402,099,6093,731,132 (best)779,413L32–40
Sleep10ms, 50K workers, 1M producers2,628,2761,790,6941,166,7111,461,9922,732,450 (best)1,655,5381,659,2811,665,211677,640L41–49
Loop10, 50K workers, 1 producer7,671,684 (best)3,311,1301,291,4982,191,7903,266,7092,139,6902,738,6222,895,918891,515L50–58
Loop10, 50K workers, 100 producers10,048,582 (best)2,785,4652,048,2572,441,8822,636,9842,339,6832,786,9474,043,435804,596L59–67
Loop10, 50K workers, 1K producers9,631,427 (best)2,710,1562,114,1932,422,5382,616,8063,319,3122,997,6972,965,094556,446L68–76
Loop10, 50K workers, 10K producers9,342,026 (best)2,559,6001,957,6541,820,8913,112,2823,348,0693,124,6972,298,151625,787L77–85
Loop10, 50K workers, 1M producers5,183,600 (best)2,493,1601,327,1881,774,2303,814,4252,028,4302,026,6012,047,610385,713L86–94
Sleep5msLoop5, 50K workers, 1 producer4,080,137 (best)2,199,664595,6681,858,4402,860,6031,938,8572,113,3042,118,268724,425L95–103
Sleep5msLoop5, 50K workers, 100 producers4,370,254 (best)2,458,7641,545,8271,829,2432,783,6241,759,6542,030,1083,658,544765,675L104–112
Sleep5msLoop5, 50K workers, 1K producers4,342,675 (best)2,394,3481,723,5811,641,4792,615,5621,638,4601,885,0463,271,588695,670L113–121
Sleep5msLoop5, 50K workers, 10K producers3,897,961 (best)2,176,7211,489,0951,308,1612,147,9162,323,8462,083,9023,830,494836,893L122–130
Sleep5msLoop5, 50K workers, 1M producers3,066,865 (best)1,820,7571,243,5401,520,1682,875,6221,742,8441,679,3131,667,937633,235L131–139
Sleep10ms, 100K workers, 1 producer3,382,564 (best)2,031,611797,0931,684,5812,771,7641,886,0081,961,9941,985,532688,822L140–148
Sleep10ms, 100K workers, 100 producers3,495,042 (best)2,325,2781,510,8551,596,9582,653,8071,798,2241,785,9893,026,245730,926L149–157
Sleep10ms, 100K workers, 1K producers3,404,792 (best)2,298,8161,611,3591,619,9522,655,5451,609,9191,809,3482,940,701868,513L158–166
Sleep10ms, 100K workers, 10K producers3,307,640 (best)2,084,8481,482,9961,378,6312,489,6941,609,5541,913,0042,660,361666,634L167–175
Sleep10ms, 100K workers, 1M producers2,629,6611,743,8091,209,2731,341,4182,675,045 (best)1,496,7471,527,0971,492,396588,528L176–184
Loop10, 100K workers, 1 producer8,016,914 (best)3,318,506915,5821,962,6753,223,1442,125,8602,315,9822,467,976879,748L185–193
Loop10, 100K workers, 100 producers9,973,951 (best)2,802,8052,263,9892,053,6402,757,5812,245,1712,303,8112,861,536800,109L194–202
Loop10, 100K workers, 1K producers9,616,461 (best)2,783,8202,068,0402,203,1842,772,6343,084,4332,330,6522,577,287864,647L203–211
Loop10, 100K workers, 10K producers9,303,365 (best)2,589,2951,830,8662,072,1313,119,8793,140,7862,473,9212,379,015779,417L212–220
Loop10, 100K workers, 1M producers5,040,936 (best)2,505,3921,257,4971,406,4733,846,9602,014,7591,925,6271,909,667284,459L221–229
Sleep5msLoop5, 100K workers, 1 producer3,734,297 (best)2,077,719679,4741,589,0362,883,4251,921,9032,052,3521,916,682730,519L230–238
Sleep5msLoop5, 100K workers, 100 producers4,111,318 (best)2,482,0531,532,2711,642,2332,685,4301,829,1441,801,0632,497,989778,669L239–247
Sleep5msLoop5, 100K workers, 1K producers4,163,080 (best)2,373,6471,716,5681,634,5492,682,9401,680,0771,870,5072,661,241753,595L248–256
Sleep5msLoop5, 100K workers, 10K producers3,983,207 (best)2,149,6281,530,0451,438,9012,702,7151,612,9351,919,2402,789,687684,114L257–265
Sleep5msLoop5, 100K workers, 1M producers2,757,3491,805,5621,225,2961,382,6582,879,461 (best)1,545,7011,560,5071,560,923630,118L266–274
Sleep10ms, 300K workers, 1 producer2,455,9632,093,774576,7381,213,3142,784,449 (best)1,855,3331,547,5761,621,264722,264L275–283
Sleep10ms, 300K workers, 100 producers2,719,832 (best)2,306,7271,484,9831,251,6952,617,4961,759,0261,476,3861,688,833942,273L284–292
Sleep10ms, 300K workers, 1K producers2,726,497 (best)2,213,6751,633,2171,302,7432,680,2431,628,2271,468,2251,746,018709,496L293–301
Sleep10ms, 300K workers, 10K producers2,766,1792,002,1531,477,3991,318,6602,815,102 (best)1,632,0261,519,3491,715,160675,031L302–310
Sleep10ms, 300K workers, 1M producers2,660,3671,747,8751,173,2501,153,4332,669,081 (best)748,2951,326,9061,325,233320,406L311–319
Loop10, 300K workers, 1 producer7,731,116 (best)3,256,1711,115,3851,383,1623,147,9002,043,3141,752,5002,041,223885,063L320–328
Loop10, 300K workers, 100 producers9,990,429 (best)2,788,7182,115,6811,566,9532,884,2602,312,3041,802,2481,927,430815,860L329–337
Loop10, 300K workers, 1K producers9,748,598 (best)2,723,6202,071,1941,612,6492,961,0103,133,6471,722,2041,898,363938,049L338–346
Loop10, 300K workers, 10K producers9,514,309 (best)2,597,0261,988,2611,593,1713,787,7893,325,4011,565,7051,829,661547,704L347–355
Loop10, 300K workers, 1M producers5,112,507 (best)2,515,6071,297,0761,326,9603,819,5152,005,2561,572,7451,643,865183,942L356–364
Sleep5msLoop5, 300K workers, 1 producer2,459,2782,248,233882,2461,211,7962,997,183 (best)1,896,4571,575,6171,717,074763,774L365–373
Sleep5msLoop5, 300K workers, 100 producers2,742,270 (best)2,438,9001,539,0051,261,4482,634,2121,799,7081,481,6431,777,802802,117L374–382
Sleep5msLoop5, 300K workers, 1K producers2,804,855 (best)2,384,0871,682,3701,293,5082,709,6181,660,9921,507,3171,703,386769,307L383–391
Sleep5msLoop5, 300K workers, 10K producers2,989,275 (best)2,164,4181,508,1851,320,2032,773,5161,647,1671,517,7621,799,994673,978L392–400
Sleep5msLoop5, 300K workers, 1M producers2,482,1231,834,4651,222,7471,214,8763,068,841 (best)1,070,7991,357,2131,351,918357,014L401–409
Loop10, 1 worker, 1 producer6,326,0351,708,6341,477,7814,029,7482,505,97711,383,8213,830,59626,148,651 (best)2,783,170L410–418
Loop10, 1 worker, 100 producers7,090,9181,829,2841,257,5692,485,982983,8824,734,9762,661,37427,854,937 (best)1,580,776L419–427
Loop10, 1 worker, 1K producers7,190,2331,164,781950,9481,991,5431,976,9664,724,1643,535,45626,084,154 (best)1,564,245L428–436
Loop10, 1 worker, 10K producers7,177,9701,587,6421,608,2071,347,437826,1604,376,1332,947,09124,737,062 (best)1,568,077L437–445
Loop10, 1 worker, 1M producers5,181,886802,4511,151,5481,323,3681,266,0373,965,1712,352,3585,320,750 (best)1,283,997L446–454
Loop10K, 1 worker, 1 producer322,978262,550150,606206,440264,605336,341220,928337,903 (best)299,628L455–463
Loop10K, 1 worker, 100 producers326,262263,467173,781307,338268,565314,035320,871334,568 (best)278,476L464–472
Loop10K, 1 worker, 1K producers325,224263,508152,058302,173262,424316,598321,028336,500 (best)277,681L473–481
Loop10K, 1 worker, 10K producers325,199256,045202,793296,590255,972318,011313,400337,132 (best)271,426L482–490
Loop10K, 1 worker, 1M producers324,508268,194192,389284,650241,213322,427295,566328,842 (best)260,446L491–499
Run detailsgo test command, machine, versions
shcd pool && go test -run xxx -bench 'Tasks' -cpu 8 -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
GOMAXPROCS
8

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
antsv2.12.1
workerpoolv1.2.2
concv0.3.0
x/sync (errgroup)v0.24.0
bytedance/gopkg (gopool)v0.1.4
pondv2.7.2

Worker pool, GOMAXPROCS 4

The same matrix with GOMAXPROCS 4.

Show

55 groups in scope · VarMQ leads 19, others 36 · 9 subjects

Tasks per second

tasks/s · higher is better · mean of 55 groups
  1. VarMQwon 19 of 55 4,037,474 1.00 times VarMQ, the baseline
  2. BufferedPool †won 21 of 55 3,942,859 0.98 times VarMQ, behind VarMQ
  3. Gopoolwon 0 of 55 2,281,205 0.57 times VarMQ, behind VarMQ
  4. ErrGroupwon 11 of 55 2,210,498 0.55 times VarMQ, behind VarMQ
  5. Antswon 4 of 55 2,055,044 0.51 times VarMQ, behind VarMQ
  6. GoroutinePool †won 0 of 55 1,908,708 0.47 times VarMQ, behind VarMQ
  7. Concwon 0 of 55 1,558,666 0.39 times VarMQ, behind VarMQ
  8. WorkerPoolwon 0 of 55 1,395,833 0.35 times VarMQ, behind VarMQ
  9. Pondwon 0 of 55 773,266 0.19 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

† A baseline, not a library: N goroutines reading one channel. The buffered one holds all 1M tasks.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

Task · workers1 producer100 producers1K producers10K producers1M producers
Sleep10ms · 50K
Loop10 · 50K
Sleep5msLoop5 · 50K
Sleep10ms · 100K
Loop10 · 100K
Sleep5msLoop5 · 100K
Sleep10ms · 300K
Loop10 · 300K
Sleep5msLoop5 · 300K
Loop10 · 1 worker
Loop10K · 1 worker
  • VQVarMQ19
  • BPBufferedPool †21
  • EGErrGroup11
  • ANAnts4

Where VarMQ does not win

Another subject has the fastest throughput in 36 groups of 55. VarMQ has it in 19.

  • BufferedPool † 21 groups
  • ErrGroup 11 groups
  • Ants 4 groups
All 36 groups where VarMQ does not win, biggest gap first
GroupBestVarMQAhead bySource
Loop10, 1 worker, 1 producer BufferedPool † 26,202,379 6,632,332 3 of 9 3.95× L410–418
Loop10, 1 worker, 100 producers BufferedPool † 27,380,238 7,308,651 2 of 9 3.75× L419–427
Loop10, 1 worker, 1K producers BufferedPool † 26,829,003 7,342,679 2 of 9 3.65× L428–436
Loop10, 1 worker, 10K producers BufferedPool † 23,643,298 7,271,060 2 of 9 3.25× L437–445
Sleep10ms, 50K workers, 1 producer BufferedPool † 3,736,757 2,504,306 2 of 9 1.49× L5–13
Sleep10ms, 50K workers, 1K producers BufferedPool † 3,674,940 2,481,416 2 of 9 1.48× L23–31
Sleep10ms, 50K workers, 10K producers BufferedPool † 3,662,015 2,491,621 2 of 9 1.47× L32–40
Sleep10ms, 50K workers, 100 producers BufferedPool † 3,673,447 2,554,864 2 of 9 1.44× L14–22
Sleep10ms, 100K workers, 1M producers ErrGroup 1,967,247 1,373,342 6 of 9 1.43× L176–184
Sleep10ms, 300K workers, 1M producers ErrGroup 1,951,801 1,392,523 4 of 9 1.40× L311–319
Sleep5msLoop5, 300K workers, 1M producers ErrGroup 2,107,373 1,521,728 4 of 9 1.38× L401–409
Sleep10ms, 50K workers, 1M producers ErrGroup 1,968,705 1,436,960 6 of 9 1.37× L41–49
Sleep5msLoop5, 100K workers, 1M producers ErrGroup 2,040,959 1,491,073 4 of 9 1.37× L266–274
Sleep5msLoop5, 50K workers, 1M producers ErrGroup 2,047,829 1,499,597 6 of 9 1.37× L131–139
Sleep5msLoop5, 300K workers, 1 producer ErrGroup 2,540,219 2,180,862 3 of 9 1.16× L365–373
Sleep5msLoop5, 50K workers, 100 producers BufferedPool † 3,332,321 2,873,030 2 of 9 1.16× L104–112
Sleep10ms, 300K workers, 1 producer ErrGroup 2,282,556 1,972,243 3 of 9 1.16× L275–283
Sleep5msLoop5, 50K workers, 10K producers BufferedPool † 3,185,706 2,771,238 2 of 9 1.15× L122–130
Sleep10ms, 300K workers, 100 producers Ants 2,132,405 1,900,906 3 of 9 1.12× L284–292
Loop10, 1 worker, 1M producers BufferedPool † 4,798,241 4,304,050 2 of 9 1.11× L446–454
Sleep5msLoop5, 300K workers, 1K producers Ants 2,338,347 2,136,678 2 of 9 1.09× L383–391
Sleep5msLoop5, 50K workers, 1K producers BufferedPool † 3,101,827 2,860,632 2 of 9 1.08× L113–121
Sleep10ms, 300K workers, 1K producers Ants 2,212,462 2,070,837 2 of 9 1.07× L293–301
Sleep10ms, 100K workers, 100 producers BufferedPool † 2,572,532 2,423,256 2 of 9 1.06× L149–157
Loop10K, 1 worker, 1 producer BufferedPool † 333,826 324,401 3 of 9 1.03× L455–463
Loop10K, 1 worker, 1K producers BufferedPool † 334,843 325,729 2 of 9 1.03× L473–481
Loop10K, 1 worker, 1M producers BufferedPool † 333,400 325,027 3 of 9 1.03× L491–499
Sleep10ms, 100K workers, 1K producers BufferedPool † 2,526,768 2,464,268 2 of 9 1.03× L158–166
Loop10K, 1 worker, 100 producers BufferedPool † 332,585 324,909 2 of 9 1.02× L464–472
Loop10K, 1 worker, 10K producers BufferedPool † 333,216 325,666 2 of 9 1.02× L482–490
Sleep10ms, 100K workers, 1 producer ErrGroup 2,326,813 2,277,277 2 of 9 1.02× L140–148
Sleep5msLoop5, 100K workers, 1K producers BufferedPool † 2,737,841 2,685,087 2 of 9 1.02× L248–256
Sleep5msLoop5, 300K workers, 100 producers Ants 2,276,359 2,261,985 2 of 9 1.01× L374–382
Sleep10ms, 100K workers, 10K producers BufferedPool † 2,439,078 2,423,984 2 of 9 1.01× L167–175
Sleep10ms, 300K workers, 10K producers ErrGroup 2,115,244 2,108,599 2 of 9 1.00× L302–310
Sleep5msLoop5, 300K workers, 10K producers ErrGroup 2,226,923 2,220,232 2 of 9 1.00× L392–400
Every row behind these numbers · 55 groups
Tasks per second (tasks/s) for each group in scope. The best value of each group is marked.
GroupVarMQAntsWorkerPoolConcErrGroupGopoolGoroutinePool †BufferedPool †PondSource
Sleep10ms, 50K workers, 1 producer2,504,3061,913,2161,183,1211,883,2932,253,8502,215,6002,024,3793,736,757 (best)623,183L5–13
Sleep10ms, 50K workers, 100 producers2,554,8642,177,4041,619,4901,725,8212,110,1372,021,5651,921,1553,673,447 (best)654,648L14–22
Sleep10ms, 50K workers, 1K producers2,481,4162,237,6041,591,3481,644,0582,066,1291,712,7811,915,1213,674,940 (best)664,580L23–31
Sleep10ms, 50K workers, 10K producers2,491,6211,920,7821,452,2881,454,4611,913,1172,175,6902,113,9213,662,015 (best)750,254L32–40
Sleep10ms, 50K workers, 1M producers1,436,9601,517,0661,042,0721,398,2671,968,705 (best)1,883,4091,510,1711,544,148653,792L41–49
Loop10, 50K workers, 1 producer8,974,684 (best)3,663,2151,557,5532,427,8423,588,2682,604,3652,880,1212,932,268854,865L50–58
Loop10, 50K workers, 100 producers9,414,707 (best)2,909,9062,280,6602,440,2722,610,2442,293,8292,663,6004,692,294882,400L59–67
Loop10, 50K workers, 1K producers9,242,992 (best)2,884,8792,111,8162,562,4572,723,8932,553,6152,954,3283,428,164821,661L68–76
Loop10, 50K workers, 10K producers9,100,058 (best)2,713,5621,927,6112,772,2043,016,2962,652,4573,405,3483,249,114766,849L77–85
Loop10, 50K workers, 1M producers4,078,666 (best)2,728,6151,365,8791,726,1263,757,4272,399,1192,076,8882,168,784707,310L86–94
Sleep5msLoop5, 50K workers, 1 producer2,683,120 (best)2,188,8311,397,1441,827,4672,548,1922,230,8501,993,7572,020,323703,813L95–103
Sleep5msLoop5, 50K workers, 100 producers2,873,0302,365,3181,601,6061,628,0282,082,0711,916,4771,803,2993,332,321 (best)724,189L104–112
Sleep5msLoop5, 50K workers, 1K producers2,860,6322,316,9291,595,2461,677,8682,129,0811,529,9431,871,6923,101,827 (best)750,682L113–121
Sleep5msLoop5, 50K workers, 10K producers2,771,2381,979,8681,393,4301,437,5492,034,4522,113,0582,032,7823,185,706 (best)792,167L122–130
Sleep5msLoop5, 50K workers, 1M producers1,499,5971,631,6791,029,4381,386,1092,047,829 (best)1,957,1751,543,4321,542,083649,209L131–139
Sleep10ms, 100K workers, 1 producer2,277,2771,929,5361,344,5981,635,2952,326,813 (best)2,213,2911,752,7241,778,211621,073L140–148
Sleep10ms, 100K workers, 100 producers2,423,2562,235,9571,544,8551,439,4831,902,9912,016,2001,538,4962,572,532 (best)676,464L149–157
Sleep10ms, 100K workers, 1K producers2,464,2682,161,7871,573,4921,526,2741,990,9951,593,5681,629,1402,526,768 (best)667,401L158–166
Sleep10ms, 100K workers, 10K producers2,423,9841,901,6251,393,1221,427,6412,150,4161,599,4491,757,4592,439,078 (best)813,016L167–175
Sleep10ms, 100K workers, 1M producers1,373,3421,482,7581,004,0841,289,6241,967,247 (best)1,870,1841,414,2721,411,968591,249L176–184
Loop10, 100K workers, 1 producer8,822,850 (best)3,695,054999,5472,203,4063,614,5162,526,5632,594,5062,748,426887,493L185–193
Loop10, 100K workers, 100 producers9,073,531 (best)2,850,1102,254,0062,176,8562,595,7112,334,2072,352,5622,934,572889,293L194–202
Loop10, 100K workers, 1K producers8,963,968 (best)2,823,7952,092,5932,162,9662,860,4592,605,7632,411,8162,778,263819,885L203–211
Loop10, 100K workers, 10K producers8,741,077 (best)2,712,1491,878,6642,321,1163,242,4042,619,0152,967,8022,785,151769,006L212–220
Loop10, 100K workers, 1M producers4,085,856 (best)2,712,5801,367,8331,491,6903,796,3752,379,8671,962,0922,047,578445,405L221–229
Sleep5msLoop5, 100K workers, 1 producer2,588,982 (best)2,177,3721,266,8181,678,7432,534,7522,282,1091,830,3251,874,953713,349L230–238
Sleep5msLoop5, 100K workers, 100 producers2,675,082 (best)2,369,5451,615,6561,476,9841,919,2441,911,9841,558,2962,363,042731,775L239–247
Sleep5msLoop5, 100K workers, 1K producers2,685,0872,325,6821,589,7781,586,3902,003,6711,785,4871,631,0382,737,841 (best)698,138L248–256
Sleep5msLoop5, 100K workers, 10K producers2,612,762 (best)1,962,6301,441,3481,462,8212,156,8601,675,2461,804,5502,345,062842,579L257–265
Sleep5msLoop5, 100K workers, 1M producers1,491,0731,672,6731,036,4741,342,9392,040,959 (best)1,947,0891,410,1871,459,386578,672L266–274
Sleep10ms, 300K workers, 1 producer1,972,2431,895,1031,400,1811,259,5922,282,556 (best)2,114,4101,449,0941,528,653619,592L275–283
Sleep10ms, 300K workers, 100 producers1,900,9062,132,405 (best)1,549,6041,165,9481,843,3221,816,2481,295,5882,019,173681,027L284–292
Sleep10ms, 300K workers, 1K producers2,070,8372,212,462 (best)1,531,3331,222,4191,940,5761,344,6061,309,0231,682,078728,195L293–301
Sleep10ms, 300K workers, 10K producers2,108,5991,899,8761,378,3671,262,6762,115,244 (best)1,526,6511,455,9831,683,873609,106L302–310
Sleep10ms, 300K workers, 1M producers1,392,5231,483,4171,017,5601,082,7281,951,801 (best)1,875,4491,210,4271,254,215400,028L311–319
Loop10, 300K workers, 1 producer8,904,451 (best)3,691,593876,2631,587,8283,559,9902,486,2492,030,8572,167,295880,499L320–328
Loop10, 300K workers, 100 producers9,540,875 (best)2,884,6752,303,5451,512,6102,725,5202,314,5531,763,4382,057,987877,699L329–337
Loop10, 300K workers, 1K producers8,864,308 (best)2,880,7632,139,9061,525,2422,817,0872,411,7911,891,4271,864,496821,228L338–346
Loop10, 300K workers, 10K producers8,823,550 (best)2,649,0411,937,7961,600,8223,558,4892,536,0541,900,0951,914,892772,312L347–355
Loop10, 300K workers, 1M producers4,006,494 (best)2,774,2041,380,8121,501,4983,906,7692,394,6711,659,2671,691,046404,836L356–364
Sleep5msLoop5, 300K workers, 1 producer2,180,8622,158,3721,469,8281,300,4352,540,219 (best)2,267,6991,485,3051,568,345697,295L365–373
Sleep5msLoop5, 300K workers, 100 producers2,261,9852,276,359 (best)1,601,3311,169,3401,899,6211,968,9191,286,9941,614,006727,407L374–382
Sleep5msLoop5, 300K workers, 1K producers2,136,6782,338,347 (best)1,562,4461,195,5591,985,4451,721,6491,337,5281,588,406700,550L383–391
Sleep5msLoop5, 300K workers, 10K producers2,220,2321,939,9391,425,9251,234,4562,226,923 (best)1,448,6101,441,5741,684,125637,865L392–400
Sleep5msLoop5, 300K workers, 1M producers1,521,7281,645,2701,037,6571,156,7072,107,373 (best)1,896,8431,204,2191,270,588372,732L401–409
Loop10, 1 worker, 1 producer6,632,3321,242,2261,769,6912,090,6011,341,60111,813,0213,692,38526,202,379 (best)2,773,548L410–418
Loop10, 1 worker, 100 producers7,308,6511,696,6331,712,3543,028,2652,482,5474,781,5705,785,34327,380,238 (best)1,733,181L419–427
Loop10, 1 worker, 1K producers7,342,6791,461,3921,494,4502,709,9952,371,5714,789,0043,910,77226,829,003 (best)1,686,809L428–436
Loop10, 1 worker, 10K producers7,271,0601,402,0851,337,6442,115,8811,302,6254,927,4313,558,88823,643,298 (best)1,705,779L437–445
Loop10, 1 worker, 1M producers4,304,050895,5931,349,3661,352,9131,366,0163,808,8822,519,0204,798,241 (best)1,530,277L446–454
Loop10K, 1 worker, 1 producer324,401262,078179,912217,314268,953330,298205,916333,826 (best)300,071L455–463
Loop10K, 1 worker, 100 producers324,909265,614186,457317,155262,930318,468322,479332,585 (best)282,164L464–472
Loop10K, 1 worker, 1K producers325,729263,156161,846313,304264,692310,645321,535334,843 (best)280,022L473–481
Loop10K, 1 worker, 10K producers325,666253,377228,233305,421252,112312,945311,607333,216 (best)280,109L482–490
Loop10K, 1 worker, 1M producers325,027261,287186,733283,844250,315329,648304,900333,400 (best)282,891L491–499
Run detailsgo test command, machine, versions
shcd pool && go test -run xxx -bench 'Tasks' -cpu 4 -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
GOMAXPROCS
4

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
antsv2.12.1
workerpoolv1.2.2
concv0.3.0
x/sync (errgroup)v0.24.0
bytedance/gopkg (gopool)v0.1.4
pondv2.7.2

Message queues on Redis

Six subjects from five libraries on Redis 7.2.

Show

12 groups of 24 in scope · VarMQ leads 4, others 8 · 6 subjects

Jobs per second

jobs/s · higher is better · mean of 12 groups
  1. VarMQwon 4 of 12 33,005 1.00 times VarMQ, the baseline
  2. VarMQDistributedwon 0 of 12 31,044 0.94 times VarMQ, behind VarMQ
  3. GocraftWorkwon 1 of 12 29,200 0.88 times VarMQ, behind VarMQ
  4. Rmqwon 7 of 12 26,476 0.80 times VarMQ, behind VarMQ
  5. Taskqwon 0 of 12 20,835 0.63 times VarMQ, behind VarMQ
  6. Asynqwon 0 of 12 14,804 0.45 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

Task · workers · instances1 producer100 producers
Noop · 10 · C1
Noop · 100 · C1
Noop · 1000 · C1
Sleep1ms · 10 · C1
Sleep1ms · 100 · C1
Sleep1ms · 1000 · C1
  • VQVarMQ4
  • RMRmq7
  • GWGocraftWork1

Where VarMQ does not win

Another subject has the fastest throughput in 8 groups of 12. VarMQ has it in 4.

  • Rmq 7 groups
  • GocraftWork 1 group
All 8 groups where VarMQ does not win, biggest gap first
GroupBestVarMQAhead bySource
Noop, 100 workers, C1, 1 producer Rmq 35,708 VarMQDistributed 21,426 3 of 6 1.67× L27–32
Noop, 1000 workers, C1, 1 producer Rmq 34,621 VarMQDistributed 21,425 3 of 6 1.62× L49–54
Noop, 10 workers, C1, 1 producer Rmq 35,129 21,968 3 of 6 1.60× L5–10
Sleep 1 ms, 100 workers, C1, 1 producer Rmq 28,837 VarMQDistributed 21,177 3 of 6 1.36× L93–98
Sleep 1 ms, 1000 workers, C1, 1 producer Rmq 28,898 21,243 3 of 6 1.36× L115–120
Sleep 1 ms, 10 workers, C1, 100 producers Rmq 6,314 5,077 4 of 6 1.24× L77–82
Sleep 1 ms, 10 workers, C1, 1 producer Rmq 7,032 5,695 4 of 6 1.23× L71–76
Noop, 10 workers, C1, 100 producers GocraftWork 48,917 41,816 2 of 6 1.17× L11–16
Every row behind these numbers · 12 groups
Jobs per second (jobs/s) for each group in scope. The best value of each group is marked.
GroupVarMQAsynqVarMQDistributedRmqTaskqGocraftWorkSource
Noop, 10 workers, C1, 1 producer21,96815,80621,66435,129 (best)19,03125,428L5–10
Noop, 10 workers, C1, 100 producers41,81617,82338,90929,61634,43448,917 (best)L11–16
Noop, 100 workers, C1, 1 producer20,81215,09621,42635,708 (best)18,44825,731L27–32
Noop, 100 workers, C1, 100 producers59,898 (best)17,74454,03128,52134,49944,775L33–38
Noop, 1000 workers, C1, 1 producer21,15717,71021,42534,621 (best)16,35125,147L49–54
Noop, 1000 workers, C1, 100 producers58,308 (best)18,95454,00730,01027,19740,255L55–60
Sleep 1 ms, 10 workers, C1, 1 producer5,6955,3325,5147,032 (best)5,7456,144L71–76
Sleep 1 ms, 10 workers, C1, 100 producers5,0774,9074,8666,314 (best)5,2275,528L77–82
Sleep 1 ms, 100 workers, C1, 1 producer21,01714,70321,17728,837 (best)18,81025,093L93–98
Sleep 1 ms, 100 workers, C1, 100 producers45,894 (best)17,31542,15826,20827,74344,324L99–104
Sleep 1 ms, 1000 workers, C1, 1 producer21,24316,26421,19728,898 (best)16,51722,712L115–120
Sleep 1 ms, 1000 workers, C1, 100 producers73,175 (best)15,99866,15226,82126,01536,343L121–126
Run detailsgo test command, machine, versions
shtask redis:upcd redis && go test -run xxx -bench 'Durable/^(Noop|Sleep1ms)W\d+C1$' -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
Threads
22

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
redisqv1.5.0
Asynqv0.26.0
rmqv5.2.0
taskqv3.2.9
gocraft/workv0.5.1
go-redisv9.23.0 (taskq uses v8.11.5)
redigov1.9.3

Message queues on SQLite

Five subjects from four libraries, WAL checkpoint at 1000 and 10000 pages.

Show

8 groups in scope · VarMQ leads 8, others 0 · 5 subjects

Jobs per second

jobs/s · higher is better · mean of 8 groups
  1. VarMQwon 8 of 8 28,628 1.00 times VarMQ, the baseline
  2. Goqitewon 0 of 8 4,064 0.14 times VarMQ, behind VarMQ
  3. Riverwon 0 of 8 2,614 0.09 times VarMQ, behind VarMQ

The dashed line marks VarMQ. An amber ratio means the lane is ahead of it. The “×” column divides the lane by VarMQ.

Not in the lanes: Backlite (6 of 8 groups), VarMQSingleFile (2 of 8 groups). A mean over unequal groups would not compare like with like. Narrow the filters to see them.

Who leads each group

one square = one group of rows

A filled green square: a VarMQ subject leads the group. An outlined amber square: another subject leads, and its code is in the square. A dashed square with “=”: a VarMQ subject and another subject share the best value, so neither leads. Press a square to see that group in the lanes above.

Scenario1000 pages10000 pages
Mixed1Q
Drain1Q
DrainPrio
Mixed10Q
  • VQVarMQ8

Where VarMQ does not win

VarMQ has the fastest throughput in every one of the 8 groups in this scope.

Every row behind these numbers · 8 groups
Jobs per second (jobs/s) for each group in scope. The best value of each group is marked.
GroupVarMQGoqiteBackliteRiverVarMQSingleFileSource
Mixed1Q, 1000 pages8,575 (best)3,0329241,375not runL5–8
Mixed1Q, 10000 pages11,860 (best)7,0912942,115not runL9–12
Drain1Q, 1000 pages14,725 (best)2,9331,1193,230not runL13–16
Drain1Q, 10000 pages21,225 (best)4,9211,0163,719not runL17–20
DrainPrio, 1000 pages12,937 (best)2,908not run3,240not runL21–23
DrainPrio, 10000 pages25,608 (best)4,828not run3,625not runL24–26
Mixed10Q, 1000 pages29,624 (best)2,1315,3261,4314,553L27–31
Mixed10Q, 10000 pages104,471 (best)4,6685,4192,17514,110L32–36
Run detailsgo test command, machine, versions
shcd sqlite && go test -run xxx -bench 'SQLite' -benchtime=2x -benchmem -timeout 0

The command runs the groups in scope on your machine, from a clone of the benchmarks repository.

Run
2026-10-25
Commit
a0d0e0b
varmq
v1.10.0
Go
1.26
CPU
Intel i7-13700
Threads
24

Intel Core i7-13700 (24 threads), linux/amd64, Go 1.26, SQLite databases on ext4 over NVMe.

The pool suite sets GOMAXPROCS to 24, 8 and 4 with no core pinning. The SQLite suite runs on all 24 threads. Redis 7.2 (Debian image) is pinned to CPU 14 and the Redis suite's client to CPUs 0-13 and 16-23 (22 threads), so Redis has a whole physical core.

CPU line of the raw file: 13th Gen Intel(R) Core(TM) i7-13700. Copied from the benchmarks README and the header of each raw file.

Library versions for this suite
LibraryVersion
varmqv1.10.0
sqliteqv0.3.0
goqitev0.4.0
backlitev0.8.0
River with its SQLite driverv0.49.0
go-sqlite3v1.14.28
  • A row is one line of output. A group is the rows that run one case with different subjects, for example Sleep10ms with 50K workers and one producer. A subject leads a group when its row is the best one. When a VarMQ subject and another subject share the best value, the group is tied: it counts for neither side, and the map marks it with “=”.
  • Two iterations per row. The files use -benchtime=2x, so each row covers two iterations, with no warm-up iteration. Absolute numbers change from run to run, so compare ratios inside one run.
  • A lane is a mean. When several groups are in scope, a lane is the arithmetic mean of that subject over them. A subject that misses some of the groups is left out, because its mean would cover other rows. Narrow the filters to see it.
  • MB means 10^6 bytes. Memory is the B/op column divided by one million. The charts at benchmarks.goptics.org divide by 2^20 and still print MB, so their memory figures are 4.6 % smaller.
  • Pool memory covers the whole process. It counts every allocation during a run of 1M tasks. VarMQ’s Add never blocks, so waiting tasks sit in an unbounded queue and use memory.
  • † marks a baseline. GoroutinePool and BufferedPool are N goroutines that read one channel. They are not libraries. Switch them off with the Baselines control.
  • Redis has two VarMQ subjects. VarMQ runs with one instance. VarMQDistributed runs with one and with four. Where VarMQ does not run, the × column divides by VarMQDistributed. The charts leave VarMQDistributed out of the one-instance, enqueue and latency groups. This page keeps it, because it is in the raw file.
  • Latency is enqueue to handler. One job at a time, 1,000 jobs, 10 workers, one instance. Lower is better.

For the full method of each suite, read the READMEs in the benchmarks repository: pool, Redis and SQLite.

The page reads a committed snapshot, src/components/bench/data.json. A script builds it from the raw .txt files at one commit of the benchmarks repository. The script keeps the line number of every row, which is how the page links each figure to its line. The docs build does not use the network.

The live charts at benchmarks.goptics.org do not send a CORS header. A browser on this site cannot read their dataset, so the page cannot refresh itself. To update the snapshot, run these commands in the docs/ folder:

Terminal window
node scripts/bench-data.mjs --ref main --check-live
pnpm test

--check-live compares every row with the published chart data and fails on a difference. The tests check the figures against the home page and check that each go test command selects exactly the groups in scope.

Install Go 1.26 or later and Task, then clone goptics/benchmarks. The Redis suite needs Docker. The SQLite suite needs a C compiler.

Terminal window
task pool:bench # one iteration of every pool benchmark
task redis:up redis:bench redis:down
task sqlite:bench

Run details, at the foot of the explorer, shows the command for the groups in scope. The full run takes hours: the committed pool files took 1282 s, 917 s and 904 s.

See also the comparison of features and the bench log.

VarMQ is MIT licensed. Benchmark figures come from github.com/goptics/benchmarks.