Вопросы многозадачности

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

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

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

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