У меня есть 2 метода обрезания суффикса домена из поддомена, и я хотел бы узнать, какой из них быстрее. Как мне это сделать?Как узнать, какой из двух методов работает быстрее?
ответ
Вы можете использовать встроенный benchmark capabilities из go test
.
Например (on play):
import (
"strings"
"testing"
)
func BenchmarkStrip1(b *testing.B) {
for br := 0; br < b.N; br++ {
host := "subdomain.domain.tld"
s := strings.Index(host, ".")
_ = host[:s]
}
}
func BenchmarkStrip2(b *testing.B) {
for br := 0; br < b.N; br++ {
host := "subdomain.domain.tld"
strings.TrimSuffix(host, ".domain.tld")
}
}
Магазин этот код в somename_test.go
и запустить go test -test.bench='.*'
. Для меня это дает следующий вывод:
% go test -test.bench='.*'
testing: warning: no tests to run
PASS
BenchmarkStrip1 100000000 12.9 ns/op
BenchmarkStrip2 100000000 16.1 ns/op
ok 21614966 2.935s
Эталон утилита будет attempt to do a certain number of runs до значимого времени не измеряется что отражается на выходе по количеству 100000000
. Код был запущен 100000000
раз, и каждая операция в цикле заняла 12,9 нс и 16,1 нс соответственно. Итак, вы можете сделать вывод, что код в BenchmarkStrip1
выполнен лучше.
Независимо от результата, часто бывает profile your program, чтобы увидеть, где находится реальное узкое место, вместо того, чтобы тратить свое время на микро-тесты, подобные этим.
Я бы также не рекомендовал писать собственный бенчмаркинг, так как есть некоторые факторы, которые вы могли бы сделать не учитывать такие как the garbage collector и running your samples long enough.
Как увеличить частоту дискретизации? Я прочитал статью pprof раньше, но это было слишком сложно с первого взгляда. Он всегда пытался скрутить URL-адрес, а затем сказал, что нет такой файл или каталог. http://pastebin.com/0Ff7DWP7 –
Ну, я собираюсь принять ответ, хотя я до сих пор не знаю, какой из двух методов обрезать строку быстрее, но это достаточно хорошо для общего вопрос/ответ.Если у кого-то есть лучший ответ, я с радостью соглашусь с ним. Попытка time.Now() и .Sub() показали, что метод TrimSuffix() в большинстве случаев был быстрее. Что странно, так это то, что любой метод был до 200ns быстрее/медленнее. Оба начали с 250ns TrimSuffix() приблизились к 70ns, где [: s] были в основном ~ 130 нс. Затем они приблизились к 70ns с нечетным всплеском ~ 250ns TrimSuffix(). Idk как надежное время.() и Sub(). –
Извините, но я испортил бенчмарк пример. Я забыл выполнить тест так часто, как требует эталонный инструмент ('b.N'). Частота выборки контрольного инструмента автоматически определяется, поэтому вы не можете изменять его напрямую, и он не имеет ничего общего с pprof. Я просто хотел, чтобы вы использовали профилирование, прежде чем тратить свое время на микро-тесты, которые в большинстве случаев не решают реальной проблемы в производительности вашего кода. – nemo
- 1. Как узнать, какой метод работает быстрее
- 2. Как узнать, какой Python env быстрее
- 3. Какой из этих двух методов более эффективен?
- 4. Какой подзапрос работает быстрее?
- 5. Какой из этих двух методов более эффективен в Java?
- 6. Какой из них быстрее
- 7. Какой из двух способов кодирования внутреннего соединения быстрее?
- 8. Какой из них быстрее
- 9. Какой из них быстрее?
- 10. Какой оператор SQL работает быстрее?
- 11. OctoPack vs nuget.exe - Какой из них быстрее?
- 12. Какой MySQL-запрос работает быстрее?
- 13. Какой селектор CSS работает быстрее?
- 14. Какой из двух методов использования python внутри erlang следует использовать?
- 15. , какой из этих двух методов лучше подходит для архитектуры SAML
- 16. Какой из них быстрее выполнить?
- 17. Как узнать, в какой программе работает JVM?
- 18. Как узнать статус HTTP быстрее?
- 19. Вызов методов, какой из них лучше?
- 20. Какой из двух способов перетасовки работает лучше?
- 21. Оптимизация запросов: какой синтаксис SELECT работает быстрее?
- 22. Какой оператор PL/SQL работает быстрее?
- 23. Как узнать, какой пользователь Hudson работает под
- 24. Как узнать, какой проект работает в Gradle
- 25. Какой запрос ActiveRecord выполняется быстрее?
- 26. Какой будет быстрее
- 27. Как узнать, из какой блокировки блока выходит?
- 28. Какой из этих двух решений «найти в массиве» работает быстрее по более крупному сценарию?
- 29. Какой условный оператор работает быстрее в SQL?
- 30. , какой язык выхода ANTLR4 работает быстрее всего?
@Leo Это Go не Java, и я сомневаюсь, что OP использует [jgo] (http://code.google.com/p/jgo/) :) – nemo
Я думаю, что сообщение в блоге переоценивает преимущества оптимизации для 10ns/оп. – elithrar
@nemo Мне очень жаль :-(Позвольте мне исправить это – Leo