What does it mean that "go block flows are pulled by long I / O operations"?
There are a limited number of threads designed to serve go * blocks. If you perform an I / O blocking operation in one of these threads, then it cannot be used for any other purpose until this operation completes (if the thread is not interrupted). This is also true for non-thread threads (i.e., Threads that are returned from the thread function), but no-thread threads come from a thread pool with limited progress. Therefore, if you block I / O in the go block, you are "hogging" that block the stream from being used by other go blocks, although the stream does not do any real work (it just waits for the I / O operation).
* This number is currently 42 + the number of processors available to the JVM.
source share