Определенно темы. Зачем? Будущее многоядерное. Почти любой новый ЦП имеет более одного ядра или, если он имеет только одно, он может поддерживать гиперпоточность и, таким образом, притворяться, что у него более одного. Чтобы эффективно использовать многоядерные процессоры (а в ближайшем будущем Intel планирует использовать до 32 ядер), вам нужно несколько потоков. Если вы запускаете все в одном основном потоке (обычно поток пользовательского интерфейса является основным потоком), у пользователей будут центральные процессоры с 8, 16 и однодневными 32 ядрами, и ваше приложение никогда не использует более одного из них, поэтому оно работает намного, намного медленнее. чем он мог бежать.
На самом деле, если вы планируете приложение в настоящее время, я бы отказался от классического дизайна и подумал о взаимоотношениях хозяин / раб. Ваш пользовательский интерфейс является основным, единственная задача - взаимодействовать с пользователем. То есть отображение данных для пользователя и сбор пользовательского ввода. Всякий раз, когда вашему приложению необходимо «обработать любые данные» (даже небольшие и даже более важные большие), создайте «задачу» любого рода, перенаправьте эту задачу в фоновый поток и заставьте поток выполнить задачу, предоставив обратную связь Пользовательский интерфейс (например, сколько процентов он выполнил или просто, если задача все еще выполняется или нет, поэтому пользовательский интерфейс может отображать «индикатор незавершенного производства»). Если возможно, разбейте задачу на множество небольших независимых подзадач и запустите несколько фоновых процессов, передавая по одной подзадаче каждой из них. Таким образом, ваше приложение может получить выгоду от многоядерных процессоров и работать быстрее, чем больше процессорных ядер.
На самом деле такие компании, как Apple и Microsoft, уже планируют, как сделать свои однопоточные интерфейсы сами по себе многопоточными. Даже с подходом, описанным выше, однажды вы можете столкнуться с тем, что интерфейс является узким местом. Фоновые процессы могут обрабатывать данные намного быстрее, чем пользовательский интерфейс может представить их пользователю или запросить ввод данных. Сегодня многие фреймворки пользовательского интерфейса мало поточнобезопасны, многие вообще не поточнобезопасны, но это изменится. Последовательная обработка (выполнение одной задачи за другой) - умирающий дизайн, параллельная обработка (выполнение множества задач одновременно) - это то, куда уходит будущее. Просто посмотрите на графические адаптеры. Даже самая современная карта NVidia имеет жалкую производительность, если вы посмотрите на скорость обработки в МГц / ГГц одного GPU. Как получается, что он может выбить дерьмо из процессоров, когда дело доходит до 3D вычислений? Просто: вместо того, чтобы вычислять одну точку многоугольника или один пиксель текстуры за другим, он вычисляет многие из них параллельно (фактически целую кучу одновременно) и таким образом достигает пропускной способности, которая все еще заставляет процессоры плакать. Например. ATI X1900 (на имя конкурента) имеет 48 шейдерных блоков!