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

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

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

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

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