What happens is that the task that calls qt_begin_blocking_action() is descheduled and enqueued in the system call queue. It is treated the same as anything else in that queue with regard to the number of concurrent operations permitted and the relationship to the servicing threads. The task, after calling qt_begin_blocking_action(), will wake up in an external, dedicated thread and can perform the blocking operation without fear that doing so would hijack the original worker thread. Once the blocking operation is complete, the task must call qt_end_blocking_action(), which will reschedule the task in the standard scheduling queues.
Table of Contents