What is the scheduling model for blocks in libdispatch? I understand there are various queues with different priorities. Is it as simple as the highest priority queue gets served first by worker threads?
If this is the case how does it avoid starvation in the lower priority queues? What happens when a thread is blocking?
How is blocking I/O handled on the worker threads?
How does it know how many worker threads to spawn, and does it spawn more to handle load during runtime?
How does libdispatch compare to something like goroutines?