<div dir="ltr">If your NIF is running in a process managed by the scheduler, then as long as it uses enif_consume_timeslice appropriately, then if it sends a message to a loaded queue, it will get penalized by a large number of reductions, get deprioritized, yield, and be dropped to the bottom of the run queue, unless I'm misunderstanding.  If one of the other tens of thousands of squirrels are runnable with a higher priority, they will take over the run slot.<div><br></div><div>That way you wouldn't have to reach into the internals of another process to make your own determination, which seems like it'd be a better idea.  But again, perhaps I'm confused.</div><div><br></div><div>F.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 25, 2017 at 12:11 PM, Roger Lipscombe <span dir="ltr"><<a href="mailto:roger@differentpla.net" target="_blank">roger@differentpla.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On 25 May 2017 at 18:07, Felix Gallo <span dir="ltr"><<a href="mailto:felixgallo@gmail.com" target="_blank">felixgallo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Rather than dive into the details of another process, wouldn't it be more erlang to use enif_consume_timeslice (<a href="http://erlang.org/doc/man/erl_nif.html#enif_consume_timeslice" target="_blank">http://erlang.org/doc/man/erl<wbr>_nif.html#enif_consume_timesli<wbr>ce</a>) and/or dirty nifs and just let the scheduler do its thing?</div></blockquote><div><br></div></span><div>This stuff's running on a background thread. Specifically, it's running a Squirrel VM (<a href="http://squirrel-lang.org" target="_blank">squirrel-lang.org</a>) on a background thread. Some of the calls in the squirrel code result in enif_send to the accompanying (1:1) Erlang process. I'd like the squirrel to (briefly) pause[1] if the Erlang process has too many messages in its queue.</div><div><br></div><div>[1] not actually pause; we're running 10s of thousands of these on a pool of background threads, we want the one that's calling enif_send too frequently to yield, *exactly* the same as an Erlang process would do.</div></div></div></div>
</blockquote></div><br></div>