[erlang-questions] BIFs use with care
Mikael Pettersson
mikpelinux@REDACTED
Tue Oct 17 19:42:48 CEST 2017
On Tue, Oct 17, 2017 at 4:47 PM, nato <nbartley@REDACTED> wrote:
> I recently saw an ESL video advising that one should
> use Erlang BIFs with care... it was a bit of an aside, so
> I was wondering if someone could could elaborate
> on this. It seemed to suggest that BIFs (the ones written
> in C?) could block/cause problems ...
>
Presumably they were referring to preemption.
BEAM code is preemptive by design, meaning that the VM can suspend a
process and schedule another at almost any instant. (I'm simplifying, but
that's the essence of it.) BIFs, being C code inside the VM, are not
preemptive by default: they have to be written in a special and potentially
slower way to make them preemptive. This means that for large inputs (e.g.
long lists or binaries, or deep terms) a broken BIF may block its scheduler
until it's finished. That's potentially very bad, depending on your
application.
Most such bugs should be fixed by now (they were more common 5+ years ago),
but it's possible some remain. I wouldn't avoid BIFs unless I knew for a
fact that the VM I was using had such a bug in it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20171017/18ce0d61/attachment.htm>
More information about the erlang-questions
mailing list