Тест с Goroutines - PullRequest
       11

Тест с Goroutines

0 голосов
/ 22 февраля 2019

Довольно новый для Голанга здесь и столкнулся с проблемой при сравнении производительности с goroutines.

Код, который я имею здесь:

    type store struct{}

    func (n *store) WriteSpan(span interface{}) error {
        return nil
    }

    func smallTest(times int, b *testing.B) {
        writer := store{}
        var wg sync.WaitGroup
        numGoroutines := times
        wg.Add(numGoroutines)
        b.ResetTimer()
        b.ReportAllocs()
        for n := 0; n < numGoroutines; n++ {
            go func() {
                writer.WriteSpan(nil)
                wg.Done()
            }()
        }
        wg.Wait()
    }
    func BenchmarkTest1(b *testing.B) {
        smallTest(1000000, b)
    }

    func BenchmarkTest2(b *testing.B) {
        smallTest(10000000, b)
    }

Мне кажется, время выполнения и распределение дляоба сценария должны быть похожими, но выполнение их дает мне следующие результаты, которые сильно различаются.Интересно, почему это происходит?Откуда берутся эти дополнительные ассигнования?

BenchmarkTest1-12 1000000000 0,26 нс / операционная 0 B / op 0 allocs / операционная

BenchmarkTest2-12 1 2868129398 нс / операционная 31872 B /op 83 allocs / op

PASS

Я также заметил, что если я добавлю внутренний цикл к writeSpan несколько раз, время выполнения и распределение будут относиться к numGoroutines * multiple times.Если это не тот способ, которым люди сравнивают с программами, существуют ли другие стандартные способы тестирования?Заранее спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Бессмысленные микробенчмарки приводят к бессмысленным результатам.


Если это не тот способ, которым люди сравнивают с программами, есть ли другие стандартные способы тестирования?

Это не способ для сравнения чего-либо.Оцените реальные проблемы.

Вы запускаете очень большое количество подпрограмм, которые ничего не делают, пока вы не насытите планировщик, машину и другие ресурсы.Это просто доказывает, что если вы достаточно долго бегаете, вы можете поставить машину на колени.

...