Поделиться через


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

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

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

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

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