I'm not familiar with libuv but is there a dedicated "watcher" thread in a thread pool that the kernel wakes up when when the disk driver has completed that I/O that it was sleeping on? If so is there a dedicated "watcher" thread for each non-blocking I/O request handled by libuv?
There is no watcher: threads get parked by the kernel as "not runnable" while they perform the I/O operation.
When the operation is finished, then they become runnable again so the kernel scheduler runs them--that is, it runs the code that comes after the I/O operation.
This code (from libuv) notifies the requester that the operation is complete.
Thanks. So is the libuv package implemented as two distinct components then consisting of:
1) The main event loop thread.
2) a thread pool of "workers" which make the actual I/O request and sleep while waiting for the I/O. Then when a "worker" thread is set to runnable again by the kernel(because it's I/O request has been completed)notifies the main event loop thread via a signal?
Comments
I'm not familiar with libuv but is there a dedicated "watcher" thread in a thread pool that the kernel wakes up when when the disk driver has completed that I/O that it was sleeping on? If so is there a dedicated "watcher" thread for each non-blocking I/O request handled by libuv?
There is no watcher: threads get parked by the kernel as "not runnable" while they perform the I/O operation.
When the operation is finished, then they become runnable again so the kernel scheduler runs them--that is, it runs the code that comes after the I/O operation.
This code (from libuv) notifies the requester that the operation is complete.
Thanks. So is the libuv package implemented as two distinct components then consisting of:
1) The main event loop thread.
2) a thread pool of "workers" which make the actual I/O request and sleep while waiting for the I/O. Then when a "worker" thread is set to runnable again by the kernel(because it's I/O request has been completed)notifies the main event loop thread via a signal?
Is that correct?
That's correct, except the notification back is probably via some queue (think of futures or Go channels) rather than signals.
I see that makes sense. Cheers.
I’m not familiar at that level.