делаю с управлением горутинами
Пытаюсь реализовать параллельный алгоритм сортировки подсчётом
Но, параллельная реализация в 10 раз дольше последовательной😬
https://codeshare.io/N3QOX4
Могу предположить, что на небольшом объеме данных время которое тратит рантайм на запуск горутин - больше, чем олнопоточное выполнение
Для бенчмарков напишите лучше именно бенчмарк тест
в вашем примере все упирается в доступ к глобальному setOfValues, возможно будет лучше работать если в горутине собрать суммы в локальную мапу, а потом применить эту мапу на setOfValues (так что вместо n операций +1 будет 1 операция +n)
ты пытаешь разбить начальный слайс на чанки и в каждом параллельно считать число вхождений значений. И надеешься, что это будет во столько раз быстрее во сколько раз будет больше горутин. Но не будет. Каждая горутина будет тормозиться о мьютекс и ждать, пока другая горутина его освободит. Поэтому это не то что не быстрее, а медленнее т.к. есть еще время, в которое работает планировщик и все эти горутины переключает.
есть битонная сортировка
как вариант, можно попробовать иметь для каждого чанка свою мапу, что позволит обойтись без мьютексов. А после подсчета всех значений во всех чанках эти мапы слить в одну. Но будет ли быстрее - надо проверять
Обсуждают сегодня