Every story and comment from the Hacker News API, in a layout borrowed from 2001.
A comment on Go 1.9 is released. Parent comment
> Mutex fairness.
> Mutex can be in 2 modes of operations: normal and starvation.
> In normal mode waiters are queued in FIFO order, but a woken up waiter
> does not own the mutex and competes with new arriving goroutines over
> the ownership. New arriving goroutines have an advantage -- they are
> already running on CPU and there can be lots of them, so a woken up
> waiter has good chances of losing. In such case it is queued at front
> of the wait queue. If a waiter fails to acquire the mutex for more than 1ms,
> it switches mutex to the starvation mode.
> In starvation mode ownership of the mutex is directly handed off from
> the unlocking goroutine to the waiter at the front of the queue.
> New arriving goroutines don't try to acquire the mutex even if it appears
> to be unlocked, and don't try to spin. Instead they queue themselves at
> the tail of the wait queue.
> If a waiter receives ownership of the mutex and sees that either
> (1) it is the last waiter in the queue, or (2) it waited for less than 1 ms,
> it switches mutex back to normal operation mode.
> Normal mode has considerably better performance as a goroutine can acquire
> a mutex several times in a row even if there are blocked waiters.
> Starvation mode is important to prevent pathological cases of tail latency.
There are no comments on this comment yet.
> Mutex fairness.
> Mutex can be in 2 modes of operations: normal and starvation.
> In normal mode waiters are queued in FIFO order, but a woken up waiter
> does not own the mutex and competes with new arriving goroutines over
> the ownership. New arriving goroutines have an advantage -- they are
> already running on CPU and there can be lots of them, so a woken up
> waiter has good chances of losing. In such case it is queued at front
> of the wait queue. If a waiter fails to acquire the mutex for more than 1ms,
> it switches mutex to the starvation mode.
> In starvation mode ownership of the mutex is directly handed off from
> the unlocking goroutine to the waiter at the front of the queue.
> New arriving goroutines don't try to acquire the mutex even if it appears
> to be unlocked, and don't try to spin. Instead they queue themselves at
> the tail of the wait queue.
> If a waiter receives ownership of the mutex and sees that either
> (1) it is the last waiter in the queue, or (2) it waited for less than 1 ms,
> it switches mutex back to normal operation mode.
> Normal mode has considerably better performance as a goroutine can acquire
> a mutex several times in a row even if there are blocked waiters.
> Starvation mode is important to prevent pathological cases of tail latency.