Будет ли программа работать быстрее с большим количеством процессоров, зависит от проблемы, которую она решает. Язык Go предоставляет конкурентные примитивы, такие как go-процедуры (goroutines) и каналы, но конкурентность позволяет параллелизм только когда основная проблема внутренне параллельна. Проблемы, которые являются последовательными, не могут быть ускорены путем добавления большего количества процессоров, в то время как те, которые могут быть разбиты на части, которые могут выполняться параллельно, могут быть ускорены, иногда значительно.
Иногда добавление большего количества процессоров может замедлить работу программы. На практике у программ, которые проводят больше времени в синхронизировании или общении, чем в выполнении полезных вычислений, может возникнуть снижение производительности при использовании несколько потоков операционной системы. Это потому, что передача данных между потоками включает в себя переключение контекстов, которое имеют значительную стоимость, и эта стоимость может увеличиться с большим количеством процессоров. Например, пример первичного сита из спецификации Go не имеет существенного параллелизма, хотя он запускает много goroutines; увеличение количества потоков (процессоров) скорее замедлит его, вместо того чтобы ускорить.
Читайте также:
Комментариев нет:
Отправить комментарий