Почему для обновления пользовательского интерфейса в качестве основного потока используется однопоточная модель?
В документе Qt говорится:
Как уже упоминалось, каждая программа имеет один поток при запуске. Эта нить называется "основной нитью" (также известной как "поток GUI" в Qt). В этом потоке должен работать GUI GUI.
В документе Android говорится:
Подобно действиям и другим компонентам, службы работают в основном поток процесса приложения
И iOS,
Настоятельно рекомендуется не обновлять элементы управления пользовательским интерфейсом и т.д. из фоновый поток (например, таймер, comms и т.д.). Это может быть причиной которые иногда очень трудно идентифицировать. Вместо этого используйте эти для принудительного выполнения кода в потоке пользовательского интерфейса (который всегда является "основной" поток).
Почему они используют однопоточную модель для обновления интерфейса?
Ответы
Ответ 1
Короткий ответ: это единственный разумный способ убедиться, что дисплей не поврежден.
Долгий ответ заключается в том, что разрешение нескольких потоков на обновление пользовательского интерфейса приводит к взаимоблокировкам, условиям гонки и всем неприятностям. Это был болезненный урок, который преподавал Java AWT (среди других UI-систем), который позволяет нескольким потокам касаться пользовательского интерфейса. См., Например, этот пост в блоге.