• A
    Expose whether event loops have active I/O · cc34dbb8
    Alex Crichton 提交于
    The green scheduler can optimize its runtime based on this by deciding to not go
    to sleep in epoll() if there is no active I/O and there is a task to be stolen.
    
    This is implemented for librustuv by keeping a count of the number of tasks
    which are currently homed. If a task is homed, and then performs a blocking I/O
    operation, the count will be nonzero while the task is blocked. The homing count
    is intentionally 0 when there are I/O handles, but no handles currently blocked.
    The reason for this is that epoll() would only be used to wake up the scheduler
    anyway.
    
    The crux of this change was to have a `HomingMissile` contain a mutable borrowed
    reference back to the `HomeHandle`. The rest of the change was just dealing with
    this fallout. This reference is used to decrement the homed handle count in a
    HomingMissile's destructor.
    
    Also note that the count maintained is not atomic because all of its
    increments/decrements/reads are all on the same I/O thread.
    cc34dbb8
rtio.rs 10.6 KB