This behaviour is as expected.
Simple explaination:-
Libuv does not assign a thread from thread pool to a file. When there are multiple I/O (file read) request comes to libuv it will creates multiple tasks of each file read operation. Task is to read a given chunk. And this assignment of task to threads is random as its a asynchronous request. Once a thread completes its task then libuv provides another task to read another chunk of any random file.