Многопоточность и пользовательский интерфейс

Хорошо, поехали. недавно я увлекся темами HCI по дизайну интерфейсов.
Я обнаружил, что может быть какой-то способ реализовать многопоточный интерфейс в случае уменьшения задержки отклика системы.
Morover. также можно сказать, что разработка пользовательского интерфейса тесно связана с ЗППП.
следовательно, мне интересно, есть ли какой-либо метод или методы, чтобы найти независимую часть, скажем, данного STD UI, который можно рассматривать как потоки?

1 ответ

Многопоточный интерфейс в большинстве случаев принципиально не отличается от своего однопоточного аналога. Все еще есть один поток, прослушивающий события интерфейса, и он будет по-прежнему запускать обработчики по мере возникновения событий. Однако разница сводится к тому, что содержится в этих обработчиках. Простой однопоточный цикл обработки событий будет выглядеть следующим образом:

Однопоточный UI diagrem

Многопоточный интерфейс немного отличается, но принцип тот же:

введите описание изображения здесь

Эффективно длинные процессы, которые инициируются в рабочих потоках, которые затем могут отчитываться перед ними в основном потоке пользовательского интерфейса, чтобы он мог сообщить о завершении.

Что касается диаграммы переходов между состояниями, многопоточность несколько усложняет ситуацию, однако есть ряд способов сделать это еще. Первый состоит в том, чтобы просто отобразить путь каждого (потенциального) потока в отдельности, для этого необходимо принять решение о том, завершены ли какие-либо потоки в точках, которые проверяет основной поток. Также возможно использовать диаграмму перехода состояний потоков, которая может демонстрировать множество потоков в одной диаграмме, но иногда ее сложнее анализировать.

Теперь, что касается использования диаграммы переходов состояний для помощи в реализации потоков в программе с пользовательским интерфейсом, вам просто нужно найти задачи между обработчиком событий и возвращением к прослушиванию, которые отнимают много времени и могут блокироваться. Затем вам нужно отправить эти задачи в виде потока, при необходимости добавив обратный вызов завершения в основной поток.

Если я что-то пропустил, пожалуйста, прокомментируйте ниже, иначе я надеюсь, что это полезно.

Другие вопросы по тегам