Мне было любопытно, как создание потоков повлияло на netduino, на котором работает .net micro framework. Принято считать, что у потоков есть неотъемлемые накладные расходы, но я было интересно, знает ли кто-нибудь, были ли оптимизации для .net micro во встроенной среде или нет, и может ли кто-нибудь дать мне некоторые подробности о том, что здесь происходит под капотом с потоком (сколько памяти выделено, сколько циклов требуется генерировать и др.).
Каковы накладные расходы на создание потоков в микроструктуре .net?
Ответы (1)
По моему опыту, для каждого потока в NETMF требуется примерно 1 КБ памяти. Что касается времени, необходимого для выделения потока, если вы обдумываете такие вопросы, вероятно, пришло время немного почитать о лучших практиках встраиваемых систем. Я не издеваюсь над вами, есть довольно много с трудом завоеванных знаний, которые могут избавить вас от душевной боли и хлопот. Дело в том, что нить вещь. Если вам нужна надежность, вы должны гарантировать максимальную потребность в ресурсах. Если вы собираетесь сказать «не более 5 потоков», то вы можете также запустить все пять как часть вашего процесса инициализации и выделить все ресурсы, которые им понадобятся. Если вы не можете этого сделать, вы не можете гарантировать стабильность вашей системы под нагрузкой. Побочным эффектом этого является то, что время, необходимое для их запуска, не имеет отношения к быстродействию вашей системы, хотя и немного влияет на время загрузки.
Накладные расходы на переключение контекста. Я не могу дать вам количественные данные, потому что мне никогда не нужно было сравнивать их. NETMF реализован прямо на металле; более чем вероятно, вы можете получить некоторое представление из документации SoC, которую вы можете загрузить с ATMEL. Или, если вы спросите на форумах netduino, есть шанс, что Крис сможет сказать вам сразу.
Если это вопрос домашнего задания, то воспользуйтесь советом Ханса и посмотрите на исходный код. Если вы хотите что-то построить и оценить пригодность платформы для приложения, может быть интересно, что я никогда не страдал от задержки переключения при выполнении чувствительных ко времени действий в разных потоках, но я никогда не использую более трех или четырех потоков и один из них обслуживает ряд логических процессов (все вещи, нечувствительные ко времени) в циклическом режиме.
Опять же, ключом к долгосрочной стабильности является избежание динамического размещения всего.
Преимущество циклического перебора с явным кодом состоит в том, что вы можете контролировать последовательность логических процессов.