15 Stimmen

Wie verwendet Grand Central Dispatch das Betriebssystem wirklich?

Ich habe eine solide Vorstellung davon, wie GCD funktioniert, aber ich möchte mehr über die angepriesenen Interna der "Betriebssystemverwaltung" wissen. Es scheint, dass fast jede technische Erklärung, wie Grand Central Dispatch mit dem "Betriebssystem" funktioniert, völlig unterschiedlich ist. Ich werde einige meiner Erkenntnisse paraphrasieren.

"Es ist ein Daemon, der global für das Betriebssystem ist der die Aufgaben auf viele Kerne Kerne verteilt."

Ich bin nicht so dumm, das zu glauben.

"Der Kernel bietet Unterstützung für alle GCD-Anwendungen zu erkennen. GCD Anwendungen arbeiten in Abstimmung mit dem Kernel zusammen und treffen logische Entscheidungen darüber wie Threads innerhalb der Anwendung zu verwalten Anwendung."

Das klingt, als wäre dieses Synchronisierungsschema viel langsamer als die Verwaltung der Logik innerhalb der Anwendung.

"Die GCD besteht ausschließlich in der Anwendung und verwendet die aktuelle System Last als Maßstab für sein Verhalten."

Das klingt für mich realistischer, aber ich habe eine solche Aussage nur an einer Stelle gesehen.

Was ist hier wirklich los? Ist es nur eine Bibliothek oder ist es ein ganzes "System"?

22voto

Louis Gerbarg Punkte 43196

Es ist eine Bibliothek, aber es gibt einige Kernel-Optimierungen, die eine Kontrolle auf Systemebene ermöglichen. Insbesondere gibt es eine zusätzliche Schnittstelle pthread_workqueue die es GCD ermöglicht, dem Kernel mitzuteilen, dass ein Thread eine bestimmte Funktion ausführen soll, aber nicht wirklich einen Thread startet (es handelt sich im Grunde um eine Fortsetzung). Zu diesem Zeitpunkt kann der Kernel entscheiden, ob er diese Fortsetzung abhängig von der Systemauslastung starten will oder nicht.

Also ja, es gibt eine globale systemweite Infrastruktur, die GCD-Threads im Kernel verwaltet, und die zweite Antwort ist die richtige. Der Fehler, den Sie machen, ist, dass Sie denken, es gäbe eine Synchronisation, die etwas kosten würde. Was GCD getan hat, ist, eine neue Schnittstelle zu verwenden, die es dem Scheduler nicht nur ermöglicht, zu entscheiden, ob die Threads auf der Grundlage ihrer relativen Priorität ausgeführt werden sollen oder nicht, sondern auch, ob sie erstellt oder zerstört werden sollen.

Es handelt sich um eine (signifikante) Optimierung, die aber nicht unbedingt notwendig ist, und die FreeBSD-Portierung bietet keine Unterstützung für die systemweiten Funktionen. Wenn Sie sich die tatsächlichen Schnittstellen ansehen wollen, finden Sie hier pthread_workqueue.h ist die Implementierung in Apples pthread.c und Sie können den Stub-Einstiegspunkt sehen, den der Kernel zum Starten der Workqueues in ihren asm-Stubs verwendet, und zwar in start_wqthread.s . Sie können auch durch xnu kriechen, um zu sehen, wie es in den Stub aufruft, wenn Sie wirklich wollen.

0 Stimmen

Vielen Dank für die ausführliche Erklärung! Meine Verwirrung begann, als ich von der FreeBSD-Portierung las und mich fragte, wie zum Teufel ein OSX-"OS"-Feature (wenn auch BSD) als Bibliothek portiert wurde! Nochmals vielen Dank +1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X