On Tue, Nov 19, 2013 at 6:24 AM, Ben Noordhuis <[email protected]> wrote:
> On Mon, Nov 18, 2013 at 9:56 PM, Aaron Boxer <[email protected]> wrote: > > is it possible to use a fixed buffer for reads, instead of alloc being > > called for each read? > > > > So, say I specify a 65532 byte buffer, can I tell libuv to use this > buffer > > repeatedly, and if there is more data than can fit, to just call the > > callback again? > > > > Thanks, > > Aaron > > That works on Unices (though it's best considered an implementation > detail) and will usually work on Windows. uv-win uses native > completion-based I/O, which means it's possible for allocation > lifetimes to overlap. > > In node.js, we exploited* the 'mostly non-overlapping' fact by having > a slab allocator that uses bump allocation. If buf->base + buf->len > == slab->top in the read callback, then it's safe to release the > memory with slab->top -= buf->len. If the bump pointer has moved, > then leave it to the garbage collector to reclaim the memory. > > More advanced schemes are certainly possible but the slab allocator > had the advantages of being easy to understand and fast in the common > case. > > * We now use something else but not because of issues with the slab > allocator. > Good to know, thanks. I don't think I need anything that sophisticated. -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/libuv. For more options, visit https://groups.google.com/groups/opt_out.
