Задать вопрос
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel

Приведите пример эффективного параллельного кода на Go?

Я написал довольно много production кода на Go. Goroutins я использую только для асинхронного обслуживания портов, соккетов, файлов. Мне ни разу не удалось эффективно распараллелить расчетный алгоритм, ни разу. Даже классическое решето Эратосфена за авторством команды разработчиков языка
package main
func Generate(ch chan<- int) {
	for i := 2; ; i++ {
		ch <- i 
	}
}
func Filter(in <-chan int, out chan<- int, prime int) {
	for {
		i := <-in 
		if i%prime != 0 {
			out <- i 
		}
	}
}
func main() {
	ch := make(chan int) 
	go Generate(ch) 
	for i := 0; i < 10; i++ {
		prime := <-ch
		print(prime, "\n")
		ch1 := make(chan int)
		go Filter(ch, ch1, prime)
		ch = ch1
	}
}
на моей лучшей машине(два камня 20 ядер) не дает сколько нибудь существенного прироста к последовательной версии.
Что я упускаю, покажите пожалуйста эффективный параллельный код.
  • Вопрос задан
  • 764 просмотра
Подписаться 2 Простой 3 комментария
Ответ пользователя Петр Васильев К ответам на вопрос (3)
danial72
@danial72
flutter dart.
Мне кажется эффективность в параллельных вычислениях го дает, только при операциях ввода вывода, а в остальных случаях он просто достаточно быстр.
Тот же веб сервер или программа, которая в кучу потоков пишет в файлы.
Но в расчетах пользы мало
Ответ написан