Каковы накладные расходы на создание потоков в микроструктуре .net?

Мне было любопытно, как создание потоков повлияло на netduino, на котором работает .net micro framework. Принято считать, что у потоков есть неотъемлемые накладные расходы, но я было интересно, знает ли кто-нибудь, были ли оптимизации для .net micro во встроенной среде или нет, и может ли кто-нибудь дать мне некоторые подробности о том, что здесь происходит под капотом с потоком (сколько памяти выделено, сколько циклов требуется генерировать и др.).


person devshorts    schedule 03.09.2012    source источник
comment
.NET Micro имеет открытый исходный код, почему бы вам просто не взглянуть? И измеряйте то, что вы хотите знать.   -  person Hans Passant    schedule 03.09.2012


Ответы (1)


По моему опыту, для каждого потока в NETMF требуется примерно 1 КБ памяти. Что касается времени, необходимого для выделения потока, если вы обдумываете такие вопросы, вероятно, пришло время немного почитать о лучших практиках встраиваемых систем. Я не издеваюсь над вами, есть довольно много с трудом завоеванных знаний, которые могут избавить вас от душевной боли и хлопот. Дело в том, что нить вещь. Если вам нужна надежность, вы должны гарантировать максимальную потребность в ресурсах. Если вы собираетесь сказать «не более 5 потоков», то вы можете также запустить все пять как часть вашего процесса инициализации и выделить все ресурсы, которые им понадобятся. Если вы не можете этого сделать, вы не можете гарантировать стабильность вашей системы под нагрузкой. Побочным эффектом этого является то, что время, необходимое для их запуска, не имеет отношения к быстродействию вашей системы, хотя и немного влияет на время загрузки.

Накладные расходы на переключение контекста. Я не могу дать вам количественные данные, потому что мне никогда не нужно было сравнивать их. NETMF реализован прямо на металле; более чем вероятно, вы можете получить некоторое представление из документации SoC, которую вы можете загрузить с ATMEL. Или, если вы спросите на форумах netduino, есть шанс, что Крис сможет сказать вам сразу.

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

Опять же, ключом к долгосрочной стабильности является избежание динамического размещения всего.

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

person Peter Wone    schedule 02.10.2012
comment
Спасибо, это не домашнее задание, и я не разрабатываю систему. Мне просто было любопытно. Спасибо - person devshorts; 03.10.2012
comment
Затем в качестве общего замечания я хотел бы добавить, что я нахожу Netduino настолько подходящим для всего, что не требует высокоскоростной выборки и вычислений, что я разработал для него свою собственную заднюю панель, чтобы упростить монтаж корпуса, регулирование мощности для реле и серводвигателей и одну розетку, которая переназначает COM1 на COM2, поэтому я могу использовать два экрана, которые оба хотят быть на COM1. Я считаю, что обмен производительности на простоту очень выгоден. - person Peter Wone; 05.10.2012