[erlang-questions] NIF appropriateness, was: Re: Messing with heart. Port and NIF, which one is better?

Sverker Eriksson <>
Thu Feb 14 17:16:45 CET 2013


Max Lapshin wrote:
> Can enif_consume_timeslice help to mark nif-blocked pthread still active?
>   

Creating custom threads is one way to do lengthy native work while being 
nice to the VM.

Another way is to divide your work into smaller pieces and do repeated 
calls from Erlang to your NIF until the work is done. This is where 
enif_consume_timeslice (new in R16B) can be useful. You tell the runtime 
system an estimation <http://tyda.se/search/estimation?w_lang=en> of how 
much of the scheduling timeslice (about 1ms) you have consumed and 
enif_consume_timeslice will return back if your timeslice is exhausted 
or not.
Note that this is still co-operative scheduling. enif_consume_timeslice 
does NOT do any preemptive scheduling itself, you need to voluntarily 
return from your NIF in order to yield the scheduler thread to do other 
work.

For drivers, erl_drv_consume_timeslice will also be available in R16B.

/Sverker, Erlang/OTP, Ericsson



<http://tyda.se/search/voluntarily?w_lang=en>



More information about the erlang-questions mailing list