Hi,

On 2020-04-10 07:40:06 -0400, Robert Haas wrote:
> On Thu, Apr 9, 2020 at 4:00 PM Andres Freund <and...@anarazel.de> wrote:
> > Imo, yes, there should be only one process doing the chunking. For ilp, 
> > cache efficiency, but also because the leader is the only process with 
> > access to the network socket. It should load input data into one large 
> > buffer that's shared across processes. There should be a separate 
> > ringbuffer with tuple/partial tuple (for huge tuples) offsets. Worker 
> > processes should grab large chunks of offsets from the offset ringbuffer. 
> > If the ringbuffer is not full, the worker chunks should be reduced in size.
> 
> My concern here is that it's going to be hard to avoid processes going
> idle. If the leader does nothing at all once the ring buffer is full,
> it's wasting time that it could spend processing a chunk. But if it
> picks up a chunk, then it might not get around to refilling the buffer
> before other processes are idle with no work to do.

An idle process doesn't cost much. Processes that use CPU inefficiently
however...


> Still, it might be the case that having the process that is reading
> the data also find the line endings is so fast that it makes no sense
> to split those two tasks. After all, whoever just read the data must
> have it in cache, and that helps a lot.

Yea. And if it's not fast enough to split lines, then we have a problem
regardless of which process does the splitting.

Greetings,

Andres Freund


Reply via email to