What is the default target queue for a serial queue?

Does that mean that the execution of series of blocks on a serial queue is generally slower compared to execution of those blocks on a thread because (other differences aside) in the thread case the "memory barrier tax" can be avoided?

Yes, retargeting serial queues to a non-overcommit queue is a valid technique in some cases* for that reason. Ideally though you'd instead design your system to avoid hitting the lower non-overcommit thread count limit as well, because even 64 threads is probably more than you actually wanted. I'm personally fond of a minimalist "one queue (perhaps the main one) for fast operations, one queue for slow operations" approach, but I'm also more practiced in writing code that runs in system daemons, where any threads I create are competing with the foreground app.

*e.g. a system that creates an arbitrary number of objects, each of which have an internal serial queue, which they block loading data for the object from disk

1 Like