[zeromq-dev] Introducing Caravan: Simple, Faithful ZMQ-Bindings for Objective Caml (Pedro Borges)

Pedro Borges pdhb.lists at gmail.com
Mon Apr 4 14:24:17 CEST 2011


On Mon, Apr 4, 2011 at 12:31 PM, Guillaume Yziquel
<guillaume.yziquel at citycable.ch> wrote:
> Le Monday 04 Apr 2011 à 12:17:01 (+0100), Pedro Borges a écrit :

>> Unfortunately implementing zero-copy in ocaml is impossible, AFAIK,
>> without blocking every other thread. If another thread makes an
>> allocation the GC might move the string you are trying to send.
>
> Not so.
>
> There are multiple solutions. You can allocate your stuff out of the GC,
> and the GC will not compact the heap that it doesn't own.

If I allocate a buffer outside the heap, the buffer from ocaml (a
string) would have to be memcpy'ed to the buffer.

> You also the cute caml_register_generational_global_root function if you want buffers
> that are sort of fixed.

That approach looks promising.

> There is also the fact that when OCaml code enters a C stub, there is no OCaml code running at the same time (global master lock mechanism).

That is the "stop all threads" solution I talked about.



More information about the zeromq-dev mailing list