I agree. I meant that worker pools are especially useful when you can do cpu affinity - doesn’t apply to Go.
I think Go probably needs some idea of “capping” for cpu based workloads. You can cap in the local N CPUs , but in a larger app that has multiple parallel processing points you can easy create too many routines and then you are paying overhead switching costs for no reason. > On Dec 28, 2019, at 10:17 AM, Ian Lance Taylor <i...@golang.org> wrote: > > On Sat, Dec 28, 2019 at 6:11 AM Robert Engels <reng...@ix.netcom.com> wrote: >> >> Spinning up a Go routine when for each piece of work may be idiomatic but it >> is far from the best practice for many situations - mainly because of cpu >> cache invalidation. Most HPC systems create worker pools by type and then >> isolate them to cpus/cores - something you can’t do in Go. >> >> I believe there are outstanding proposals for grouping routines and core >> affinity. > > I think that today CPU cache invalidation is more or less independent > of spinning up separate goroutines. CPU cache invalidation is > something to consider for threads, but, as you say, goroutines have no > affinity to threads. Whether you use a worker pool or not, Go doesn't > currently give you any way to control how goroutines are assigned to > threads. So in general I don't see any reason to think that a worker > pool would be better or worse with regard to CPU cache invalidation. > > If Go introduces some way to associate goroutines with threads and > some way to associate threads with CPUs, that might well have an > effect on whether it is better to use a worker pool. > > Ian > > >> On Dec 28, 2019, at 7:02 AM, Agniva De Sarker <agniva.quicksil...@gmail.com> >> wrote: >> >> >>> (the task was to limit the whole thing to about 10% of cores) >> >> I still don't think you needed a worker pool here. Like OP mentioned above, >> you could just limit the number of goroutines executed to 10% of total cores. >> >> >> On Saturday, 28 December 2019 18:02:08 UTC+5:30, Chris Burkert wrote: >>> >>> There are Pros and Cons for everything in life. Some time ago I wrote a >>> database tool which does something per table where the runtime largely >>> depends on the table size. I started with one goroutine per table because >>> it was easy. But that put a high load on the database (the task was to >>> limit the whole thing to about 10% of cores) with out of memory situations. >>> So I switched to a worker pool which solved that. However now the overall >>> runtime was unpredictable. When the large tables were handled at the end >>> their runtime defined the overall runtime. So I to feed the pool with large >>> tables first. This again lead to out of memory situations so I reordered >>> the tables such that large tables are mixed with smaller tables. >>> >>> Brian Candler <b.ca...@pobox.com> schrieb am Sa. 28. Dez. 2019 um 11:09: >>>> >>>> On Friday, 27 December 2019 16:30:48 UTC, Bruno Albuquerque wrote: >>>>> >>>>> This might be useful too you, in any case: >>>>> >>>>> https://git.bug-br.org.br/bga/workerpool >>>>> >>>> >>>> I think the point from Bryan Mills' video is, "worker pool" is something >>>> of an anti-pattern in go. goroutines are so cheap that you might as well >>>> start a goroutine for each piece of work you have to do, and let it >>>> terminate when that piece of work is done. >>>> >>>> Apart from the startup cost, the other reason for having a "worker pool" >>>> is to limit the number of concurrent tasks being executed, and there are >>>> better ways of doing that in go (also shown in the video). >>>> >>>> -- >>>> 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 golan...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/golang-nuts/f840beee-748f-42b6-809f-4c7505208aee%40googlegroups.com. >> >> -- >> 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/ecddafbc-eb73-45e1-8a5a-f738e88c6821%40googlegroups.com. >> >> -- >> 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/8C1153D5-25E7-4A06-8626-1FE61D9015D5%40ix.netcom.com. > > -- > 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/CAOyqgcW9ORpo4dcUe6HYk1VS8Jp6J0EDpWAUXG4dHuYoUtbV7w%40mail.gmail.com. -- 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/F7201C4F-D59C-4C26-A291-CFBB614903FC%40ix.netcom.com.