Thanks Saul, Definitely this feature can be built on top of that PR, I'm just missing one statistic. I will jump to the PR to propose a small change.
On Fri, Aug 25, 2017 at 10:16 AM, Saúl Ibarra Corretgé <sag...@gmail.com> wrote: > >> On Aug 23, 2017, at 16:15, Pau Freixes <pfrei...@gmail.com> wrote: >> >> Hi, >> >> Im trying to push [1] for some changes in the CPython Asyncio core [1] to >> publish a new method called load that would inform about how many resources >> are used or how many of them are left. The idea behind this new method its >> pretty easy and can be summarized as: A load of an asynchronous loop can be >> at some point easily inferred using the sleeping time vs the overall time, >> this information brings us to understand how to saturate is the loop with a >> metric that informs you how many CPU resources are being used or most >> important how many CPU resources left. >> >> This metric can have many purposes, but the original idea was conceived to >> allow the developer to apply some back pressure mechanisms at the >> application layer. Having the info of how much resources you have or are >> still pending to be used give you the chance to answer a key question: could >> I face the ongoing request? The concept is not new and it's well described >> in this blog posts [3] [4] , indeed there is an implementation in NodeJS >> called `toobusy` that gets this metric implicitly using the lag of the >> callbacks [5]. >> >> What I would like is continue with the work done and not finished - we will >> see how it evolves - within the libuv. Having a new method called >> `uv_loop_load` that will give you a float value between 0.0 and 1.0 that >> will inform the user the load of the loop. The way to calculate this load is >> based on the percentage of sleeping time vs the overall time, more info >> about the algorithm here [6] >> >> Before start on working with the code I would like to receive your feedback, >> first impressions and if this change might be aligned with the maintainers >> one >> >> >> [1] https://mail.python.org/pipermail/async-sig/2017-August/000382.html >> [2] >> https://github.com/pfreixes/cpython/commit/ac07fef5af51746c7311494f21b0f067c772a2bf >> [3] https://dzone.com/articles/applying-back-pressure-when >> [4] http://engineering.voxer.com/2013/09/16/backpressure-in-nodejs/ >> [5] https://github.com/lloyd/node-toobusy >> [6] >> https://github.com/pfreixes/cpython/commit/ac07fef5af51746c7311494f21b0f067c772a2bf#diff-08afa52ab2b1511bee8527814ad44d80R1457 >> > > Hi Pau, > > I think your idea is interesting, and maybe can be implemented on top of > something like this: https://github.com/libuv/libuv/pull/1489 So (at a back > of a napkin design level) libuv would provide with some metrics on top of > which you can compute the load in userland. > > Or maybe there is benefit in having it baked in, I’m personally open to that > too. I’d appreciate if you chime in into that issue and tell James (I don’t > think he reads this mailing list) about your ideas and refine his proposal to > better cater for your use case. > > > Cheers, > > -- > Saúl > > -- > You received this message because you are subscribed to the Google Groups > "libuv" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to libuv+unsubscr...@googlegroups.com. > To post to this group, send email to libuv@googlegroups.com. > Visit this group at https://groups.google.com/group/libuv. > For more options, visit https://groups.google.com/d/optout. -- --pau -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to libuv+unsubscr...@googlegroups.com. To post to this group, send email to libuv@googlegroups.com. Visit this group at https://groups.google.com/group/libuv. For more options, visit https://groups.google.com/d/optout.