thanks to both for your replies! On Fri, Feb 16, 2018 at 4:43 PM, 'Bryan Mills' via golang-nuts <golang-nuts@googlegroups.com> wrote: > Pool the resources, not the workers. > > For example, if your resource is “memory footprint of in-flight requests”, > use a semaphore instead. (There is a “worker pool” example in the package > docs.) > > If your resource is a fixed-size set of connections, you can store the > connections in a buffered channel and select on acquiring it or ctx.Done(). > > > On Friday, February 16, 2018 at 6:30:35 PM UTC-5, Bruno Albuquerque wrote: >> >> I did something like this here: >> >> https://github.com/brunoga/workerpool >> >> I do not store the context anywhere, I pass it to my Start() method and it >> passes it down to any place I need it. >> >> >> On Fri, Feb 16, 2018 at 1:05 PM andrey mirtchovski <mirtc...@gmail.com> >> wrote: >>> >>> While trying to retrofit context.Context within a >>> worker-pool-patterned package, where work is sent down a channel to be >>> picked up by number of worker goroutines. >>> >>> I'm running against the mantra of "Do not store Contexts inside a struct >>> type". >>> >>> For example, I want to put a timeout on the amount of time spent >>> waiting to write on a channel, plus the time it takes for my write to >>> be consumed on the other end (the time the requests spends enqueued on >>> the channel buffer). How would I go about doing that without embedding >>> a context.Context inside my write? >>> >>> A typical example, here is how i would do it without the channel send: >>> >>> func p(ctx context.Context, req Request) { >>> ctx, _ = context.WithTimeout(ctx, Timeout) >>> select { >>> case <-ctx.Done: >>> // timed out >>> default: >>> worker(ctx, req) // will use ctx to determine if timeout expired >>> } >>> } >>> >>> With a channel I may do something like: >>> >>> func c(req Request, in chan Request) { >>> in <- req >>> <-out >>> } >>> >>> func worker(in chan Request) { >>> for _, v := range in { >>> // i want to cancel here if 'v' has lived past its timeout >>> // or do work if not >>> } >>> } >>> >>> And I want to have a meaningful way to measure enqueue time before req >>> is consumed by a worker in the second example. >>> >>> Hopefully that makes sense. >>> >>> -- >>> 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. >>> For more options, visit https://groups.google.com/d/optout. > > -- > 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. > For more options, visit https://groups.google.com/d/optout.
-- 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. For more options, visit https://groups.google.com/d/optout.