Рекомендации по многозадачности

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

  • Система потребляет память для контекстных данных, необходимых как для процессов, так и для потоков. Таким образом, количество процессов и потоков, которые могут быть созданы, ограничено доступной памятью.
  • Для отслеживания работы большого числа потоков требуется много процессорного времени. Если количество потоков слишком велико, большинство из них не сможет выполнить значительный ход выполнения. Если большинство потоков относятся к одному процессу, потоки других процессов назначаются для выполнения реже.

Предоставление общего доступа к ресурсам может приводить к конфликтам. Чтобы избежать их появления, необходимо синхронизировать доступ к общим ресурсам. Это справедливо для системных ресурсов (например, портов связи), ресурсов, совместно используемых несколькими процессами (например, дескрипторов файлов), или ресурсов одного процесса (например, глобальных переменных), к которым обращаются несколько потоков. Неправильное выполнение синхронизации доступа (в том же или в разных процессах) может привести к проблемам, таким как взаимоблокировка и конкуренция. Объекты и функции синхронизации, которые можно использовать для координации совместного использования ресурсов несколькими потоками. Дополнительные сведения о синхронизации см. в разделе Синхронизация выполнения нескольких потоков. Уменьшение числа потоков упрощает и повышает эффективность синхронизации ресурсов.

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