Zero-copy in Go: sendfile, splice, and the cost of io.Copy

(segflow.github.io)

54 points | by mrngm 4 hours ago ago

9 comments

  • drivebyhooting 12 minutes ago

    How is the byte counting reader supposed to work in user space without putting the buffer in user space? The article claims there is a way but I want to see what is meant by counting bytes in that case.

  • sanxiyn 2 hours ago

    A good reminder. It is surprising first time you encounter it.

    Same for Rust. As https://doc.rust-lang.org/stable/std/io/fn.copy.html says, std::io::copy can use copy_file_range(2), sendfile(2), or splice(2).

  • mike_hock 2 hours ago

    Zero-Copy in Go: Why magic is an antipattern, and: performance is observable behavior.

    • sanxiyn 2 hours ago

      What would you prefer?

      I do think it is criminal this is not documented (https://pkg.go.dev/io#Copy), but I think io.Copy is fine as an API.

      • arccy an hour ago

        it is documented by saying it calls ReadFrom or WriteTo

  • inigyou an hour ago

    This is almost like the expression problem. Copy is a new operation, and you introduced a new type, thus creating a new grid cell nobody from either side could have reasonably known about - except for the fact Copy is in the standard library so you could have known about it but not done anything.

  • throwrioawfo 2 hours ago

    Ugh, AI slop writing.

  • joaohaas 2 hours ago

    Interesting premise for a post, but I had to stop midway due to the AI slop writing adding meaningless information.