Warum müssen UI-Elemente immer über den UI-Thread erstellt / aktualisiert werden?
In (fast?) allen UI-Elementen der Programmiersprachen kann sicher nur vom UI-Thread aus zugegriffen werden. Ich verstehe, dass es sich um ein Standardproblem bei gleichzeitigem Zugriff und Synchronisierung handelt, aber ist es wirklich notwendig? Wird dieses Verhalten von den Programmiersprachen oder vom Betriebssystem auferlegt? Gibt es Programmiersprachen, in denen diese Situation anders ist?
Es wird durch das Grafik-Framework auferlegt - welches oft (aber nicht immer) vom Betriebssystem bereitgestellt wird.
Grundsätzlich ist es ineffizient, alles "richtig threadsafe" zu machen. Es ist zwar ein Problem, Aufrufe an den UI-Thread zurückzuleiten, aber der UI-Thread selbst kann Ereignisse sehr schnell verarbeiten, ohne sich um Sperren usw. kümmern zu müssen.
Es wäre sehr teuer (langsam), die gesamte Benutzeroberfläche threadsicher zu machen. Besser ist es, den Programmierer dazu zu bringen, in dem (relativ seltenen) Fall, in dem ein Thread die Benutzeroberfläche aktualisieren muss, eine Synchronisierung durchzuführen.
Es liegt daran, dass das UI-Framework auf diese Weise entworfen wurde. Es ist theoretisch möglich, ein UI-Framework zu entwerfen, das wirklich Multi-Threading ist, aber Deadlocks können schwer vermieden werden.
Graham Hamilton hat einen schönen Artikel dazu in Bezug auf Swing geschrieben, das wichtigste Java-UI-Framework.
Tags und Links language-agnostic user-interface multithreading operating-system