Ты спросил:
Есть ли способ ограничить количество потоков?
Исходя из контекста вашего вопроса, я предполагаю, что вы имеете в виду: «Есть ли какой-либо способ ограничить количество потоков, используемых AppKit?», И фактически ответ - «нет». Используя AppKit, вы неявно принимаете любую потоковую модель, которую он хочет использовать за кулисами. Это черный ящик. Конечно, физически возможно написать однопоточный исполняемый файл в OS X (то есть инструмент командной строки), но отображение любого значимого графического интерфейса в OS X без использования AppKit будет много работы.
По умолчанию NSApplication использует GCD (Grand Central Dispatch), есть ли способ отключить его?
Опять же, нет. Причины те же.
Я хочу реализовать свою собственную потоковую модель с нуля ...
Это небольшое упрощение, но модель потоковой передачи в определенной степени продиктована ОС. Все, что вы написали, используя потоки mach (на которых основаны потоки p, на которых основан GCD и т. Д.), Не будет «реализовывать вашу собственную модель потоков», это будет та же модель потоков, которую используют все остальные. Точно так же (в OS X), если вы в конечном итоге не используете потоки mach, у вас нет возможности запустить действительно параллельный поток выполнения в том же процессе (потому что только ядро может это сделать), поэтому в конце день, когда вы реализуете кооперативную систему многозадачности (которая может работать только на одном ядре) или разветвляете несколько процессов и используете общую память или что-то для координации между ними (и если вы это сделаете, вы все равно эффективно используете mach потоки, они просто находятся в разных процессах, созданных ядром.)
Если вы хотите повозиться с собственной реализацией пула потоков, просто сделайте это и игнорируйте фоновые потоки AppKit. В любом приложении AppKit основной поток всегда «особенный», поэтому вам также придется игнорировать этот факт, но если вы хотите написать пул потоков, не позволяйте тому, что делает AppKit, отвлекать вас.
Если вы действительно хотите поработать с базовой моделью потоковой передачи, вам лучше найти себе академическую / исследовательскую операционную систему (Google для онлайн-курсов университета по операционным системам) и возиться с ее планировщиком ядра / моделью потоковой передачи, чем пытаться заново - изобрести колесо в огромной, зрелой, ориентированной на массовый рынок операционной системе, заботящейся о безопасности, такой как OS X.
person
ipmcc
schedule
08.07.2014