In WinForm on C# (.NET 8.0) make a break less than 1 ms per cycle
Applications 2
-
404 37 0 1 Ready to fulfill your order.
There is necessary experience.
I will be happy to cooperate.
With respect,
by Arthur
-
Я конечно не эксперт. Но я бегло посмотрел ваш код.
У вас очень много потоков, циклов и вложенных циклов.
Плюс в каждом цикле вы создаете новые экземпляры объектов...
Это все очень трудозатратно для процессора. В 50 потоков у меня процессор еще держался, но чем больше потоков, тем больше нагрузка... И не сильно понятно... Как эту нагрузку распределять... У меня на пример 8 ядер... И потоки распределились как сами хотели... Некоторые ядра вообще простаивали в пустую...
Не сильно понятно, какую задачу вы преследуете...
Так можно дойти и до потокового голодания и до состояния, когда открытых потоков на столько много, что процессор тратит все свои ресурсы на то, что бы проверить статус каждого потока, не говоря уже о том, что бы выполнять полезную работу...
Если вам нужно выполнять похожие задачи, в вашем случае одинаковые, во многих потоках одновременно... Можно использовать для этого ресурсы видеокарты...
У неё есть CUDA ядра, которых куда больше чем 5 000... И вы можете с их помощью выполнять любую зацикленную работу, сколько угодно рас. Это куда производительнее центрального процессора... Определенно это более специфическая реализация... Но производительность такого подхода вырастает в сотри раз, бе шуток... Архитектура видеопроцессора такова, что он может за один такт опросить сотри ядер CUDA... В отличии от центрального процессора... Которые тратит очень много времени на создание одного потока, не говоря уже о тысячах... -
Добавлю:
- Я тоже погонял проект.
Именно, вот такое решение как у вас не подходит, чтобы держать паузу в 440 микросекунд.
Можно оформить в виде события, которое запускается каждые 440 микросекунд, но надо понимать суть вашей задачи.
По текущему коду не получится так сделать, как вы написали или предложили.
У меня вот так как-то получилось для 500-сот потоков. -
Могу дополнить, что с вашим исходным кодом (без изменений) на своем 8-ми ядерном Rayzen 7 в 5 000 потоков вообще не было проблем с паузами... Они были менее 0.44... Смею предположить, что на флагманах типа I9 последнего поколения или Rayzen 9 результаты будут куда лучше... Но что-то мне подсказывает, что для Вас это не выход из ситуации...
Потому нужно понимать... Что конкретно Вам нужно и делать индивидуальное решение проблемы, для конкретной реализации кода... Ведь на сколько я понимаю, это лишь пример...
-
Сделал реализацию.
Получается задержка на обработку одного цикла из 5000 Item в 750 микросекунд (release mode).
То есть 440 микросекунд на 5000 Item никак не получится.
Реализовано через 8 потоков (реальное число ядер процессора), где каждый поток по очереди берет очередную Item.
Больше потоков делать бесполезно - будет только падение из-за накладных расходов на переключение контекстов. -
Current freelance projects in the category C#
A small game for Unity 2DThe technical specifications are here, the scene, UI, and graphics are already available, only programming is needed https://www.figma.com/design/btykPl7Odr8ggvwmTqO8pH/Robo-Loop?node-id=0-1&t=vlanszjRgKHH5U5m-1 C# ∙ 20 minutes back ∙ 2 proposals |
Comparative analysis of the effectiveness of custom software (v2.2-field) and reference software (Meshtastic v2.x)
22 USD
Comparative analysis of the effectiveness of custom software (v2.2-field) and reference software (Meshtastic v2.x) on the identical hardware platform (ESP32 + SX1268, 2W) based on the criteria of range, throughput, link stability, and power consumption. Conduct tests with… C & C++, C# ∙ 4 days 2 hours back ∙ 2 proposals |
Creation of a plugin for integration with the POS system Syrve, C#Develop a plugin for the Syrve POS system (on-premise), which is installed on the establishment's server. The plugin must: (1) transmit data to our server in real-time — orders, table statuses, payments, receipts; (2) receive commands from Reservble — booking confirmations,… C#, Web Programming ∙ 6 days 22 hours back ∙ 14 proposals |