Я работал над проектом, который можно было бы обобщить как «инструмент анализа, требующего значительных вычислений», и я решил написать код так, чтобы несколько потоков использовались для параллельной обработки нескольких отдельных вычислений.
После ряда проблем из-за недостатка опыта в программировании многопоточных проектов мне кажется, что мне наконец-то удалось заставить его работать так, как я планировал.Расчеты выбираются один за другим из очереди и обрабатываются одновременно.Следуя конкретному совету (относительно соответствующего количества потоков), я получил в ответ на предыдущий вопрос Я настроил его так, чтобы один поток заполнял очередь процесса, а остальныепотоки в пуле последовательно выбирают процессы из очереди.На моей машине i7 с 8-ядерным процессором у меня был 1 производитель + 8 потребителей = 9 потоков.
Теперь мой вопрос таков:
Неудивительно, что когда все работает, как задумано, загрузка процессора ЦП машины падает на крышу.Я следил за использованием процессора через Gnome System Monitor, и кажется, что ядра находятся на 90-100% -ной нагрузке на этапе анализа программного обеспечения.Помимо замедления работы других программ (например, браузера, почты, чтения PDF-файлов и т. Д.), Работающих одновременно, есть ли другие потенциальные проблемы, о которых мне следует знать?Может ли высокая нагрузка создать какие-либо артефакты, например, в JVM?
Учитывая, что мое программное обеспечение предназначено для запуска в качестве инструмента научного анализа, а не обычного настольного приложения, я хочу согласиться на замедление работы других программ, но я хотел бы знать, есть ли другие проблемы, которые мне следуетбыть осведомленным.Любые практические примеры или предыдущий опыт очень приветствуются.
Заранее спасибо,