Ich konnte keine detaillierte Dokumentation über die @async
Makro finden. Aus den Dokumenten über Parallelismus verstehe ich, dass es nur einen System-Thread innerhalb eines Julia-Prozesses gibt und dass explizite Task-Umschaltung mit Hilfe der yieldto
-Funktion stattfindet - korrigiere mich, wenn ich falsch liege.Julia: Verständnis, wenn Taskwechsel passiert
Für mich ist es schwierig zu verstehen, wann genau diese Aufgabenwechsel nur durch den Blick auf den Code passieren, und zu wissen, wann es passiert, scheint entscheidend.
Wie ich ein yieldto
irgendwo in dem Code (oder in einer Funktion durch den Code genannt) muss da sein, um sicherzustellen, dass das System nicht mit nur einer Aufgabe fest ist.
Zum Beispiel, wenn es ein read
Betrieb, innerhalb dem es wahrscheinlich lesen, ist ein wait
Aufruf und bei der Umsetzung von wait
gibt es wahrscheinlich einen yieldto
Anruf. Ich dachte, dass ohne den yieldto
Anruf der Code in einer Aufgabe stecken würde; Das folgende Beispiel scheint jedoch zu beweisen, dass diese Hypothese falsch ist.
@async begin # Task A
while true
println("A")
end
end
while true # Task B
println("B")
end
Dieser Code erzeugt die folgende Ausgabe
BA
BA
BA
...
Es ist mir sehr unklar, wo der Task-Wechsel in der Aufgabe durch die @async
Makro in dem obigen Code erstellt geschieht.
Wie kann ich feststellen, dass ich bei einem Code die Punkte sehe, an denen eine Taskwechsel stattfindet?