• Paul Randall has an explanation here http://www.sqlperformance.com/2014/02/sql-performance/knee-jerk-waits-sos-scheduler-yield

    The Waiter List is unordered (any thread on it can be signaled at any time and move to the Runnable Queue) and the Runnable Queue is First-In-First-Out (FIFO) almost 100% of the time. The only exception to the Runnable Queue being FIFO is where multiple Resource Governor workload groups have been configured in the same resource pool and they have different priorities relative to each other. I’ve never seen this used successfully in production so I won’t discuss it further.

    Everyone on the runnable queue is ready to go, but are waiting on a scheduler (CPU resource) to become available. For each CPU/core, you'll have a scheduler and the runnable task queue should remain very low for each scheduler. When a task is Waiting it adds to Resource Waits, when a task is runnable it adds to Signal Waits. You can compare resource waits to signal waits and work out whether you have CPU contention.