@footballer

Есть ли преимущество от выполнения задачи в двух потоках на одном ядре?

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

Вопрос: в каком случае вся задача (обе подзадачи) целиком будет решена быстрее?

UPDATE: дополнительные вопросы:
1) professorweb.ru/my/csharp/thread_and_files/1/1_16.php
Значение максимально допустимого количества потоков в пуле может изменяться. В случае двуядерного ЦП оно по умолчанию составляет 1023 рабочих потоков и 1000 потоков ввода-вывода.

Для чего на двухъядерном проце 2023 потока?

2) regfordev.blogspot.ru/2010/12/thread-pool.html
С добавлением большего числа ядер задачи начинают делиться на более мелкие кусочки. Соответственно рабочие потоки чаще обращаются в глобальную очередь, нагрузка на которую явно возрастает – дает о себе знать блокировка.

Увеличение числа ядер в системе аналогично увеличению числа участников, так как задачи будут делиться на более мелкие кусочки и вследствие частого обращения в глобальную очередь – увеличится необходимость в синхронизации.

Не понял, "С добавлением большего числа ядер задачи начинают делиться на более мелкие кусочки" - это как? Вот у меня есть задача, которую моя прога выполняет в одном потоке. Если я запущу свою прогу на многоядерном проце, то моя задача поделится на много кусков? Каким образом? Она же однопоточная.
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 2
По-моему, 1-й вариант будет быстрее, так как не будет тратиться время на переключение контекста. Так что преимущества может не быть, если говорить о некой абстрактной вычислительной задаче. Но на практике ускорение может быть, когда есть работа с сетью или накопителями данных.
Это моё предположение.
Ответ написан
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Количество нюансов, которые могут повлиять на результат в вашем конкретном случае настолько велико, что дешевле написать два варианта, измерить и сравнить.

Главный постулат в работе над повышением производительности: MOM — measure, optimize, monitor.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы