Ответ 1
Это библиотека, но есть некоторые оптимизации ядра, позволяющие контролировать уровень системы. В частности, происходит то, что есть интерфейс добавления pthread_workqueue
, который позволяет GCD сообщать ядру, что он хочет, чтобы поток выполнял какую-то определенную функцию, но фактически не запускает поток (это в основном продолжение). В этот момент ядро может выбрать запуск этого продолжения или нет в зависимости от загрузки системы.
Итак, есть глобальная системная инфраструктура, которая управляет потоками GCD в ядре, а второй ответ правильный. Ошибка, которую вы делаете, думает, что там происходит синхронизация, которая будет стоить чего-то. Планировщик будет работать независимо от того, что, что сделал GCD, используется новый интерфейс, который позволяет планировщику не только решать, запускать ли потоки на основе их относительного приоритета, но и создавать или уничтожать потоки как хорошо.
Это (значительная) оптимизация, но это не является абсолютно необходимым, а порт FreeBSD фактически не поддерживает всю систему. Если вы хотите посмотреть фактические интерфейсы, вот pthread_workqueue.h, реализация выполняется в Apple pthread.c, и вы можете увидеть точку входа заглушки, которую использует ядро для запуска рабочих мест в своих asm-заглушках в start_wqthread.s. Вы также можете просканировать через xnu, чтобы увидеть, как он поднимается в заглушку, если вы действительно этого хотите.