Hello Gophers ?
Dalam catatan blog ini, saya akan menunjukkan kepada anda cara menggunakan alat hebat yang terbina dalam pakej ujian #golang. Bagaimanakah anda akan menguji prestasi sekeping kod atau fungsi? Gunakan ujian penanda aras.
Jom.
Untuk ujian ini, saya akan menggunakan Nombor Fibonacci klasik atau Jujukan Fibonacci, yang ditentukan oleh:
if (x <p>Jujukan ini penting kerana ia muncul dalam beberapa bahagian matematik dan alam semula jadi, seperti yang ditunjukkan di bawah:</p> <p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172554306490300.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Benchmark with Golang"></p> <p>Terdapat beberapa cara untuk melaksanakan kod ini dan saya akan memilih dua untuk ujian penanda aras kami: kaedah rekursif dan berulang untuk mengiranya. Objektif utama fungsi adalah untuk menyediakan <em>kedudukan</em> dan mengembalikan nombor Fibonacci pada kedudukan itu.</p> <h2> Kaedah Rekursif </h2> <pre class="brush:php;toolbar:false">// main.go func fibRecursive(n int) int { if n <h2> Kaedah Berulang </h2> <pre class="brush:php;toolbar:false">// main.go func fibIterative(position uint) uint { slc := make([]uint, position) slc[0] = 1 slc[1] = 1 if position <p>Kaedah ini tidak dioptimumkan, tetapi keputusan ujian adalah berbeza dengan ketara walaupun untuk bilangan yang kecil. Anda akan melihat ini dalam ujian. Untuk mengikuti kod tersebut, anda boleh klik di sini.</p> <p>Sekarang, untuk ujian <strong>penanda aras</strong>, mari tulis beberapa ujian dalam fail _main_test.go. Menggunakan dokumentasi Golang pada <strong>penanda aras</strong>, anda boleh mencipta fungsi untuk diuji seperti berikut:<br> </p> <pre class="brush:php;toolbar:false">// main_test.go // The key is to start every function you want to benchmark with the keyword Benchmark and use b *testing.B instead of t *testing.T as input func BenchmarkFibIterative(b *testing.B) { // Use this for-loop to ensure the code will behave correctly. // Now, you can put the function or piece of code you want to test for i := 0; i <blockquote> <p>Soalan, sebelum anda meneruskan: yang manakah lebih cepat?</p> </blockquote> <p>Mari kita jalankan ujian untuk nombor yang kecil (10) dan untuk nombor yang lebih besar sedikit (80). Untuk menjalankan ujian <strong>penanda aras</strong>, anda hanya jalankan arahan:</p> <p>pergi ujian -bench=NameoftheFunction</p> <p>Jika anda ingin mengetahui lebih lanjut tentang arahan ini, semak di sini.</p> <p><strong>Ujian pertama: kedudukan=10</strong><br> </p> <pre class="brush:php;toolbar:false">//(fibIterative) Results: cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkFibIterative-8 24491042 42.50 ns/op PASS ok playground 1.651s
Mari kita analisis dengan bantuan imej ini:
Menurut imej, kami mempunyai 8 teras untuk ujian, tiada had masa (ia akan berjalan sehingga selesai). Ia mengambil masa 1.651s untuk menyelesaikan tugasan itu.
==== Extra ==== We got 24,491,042 iterations (computations), and each iteration (op) took 42.50 ns. Doing some math, we can calculate how much time one op took: 42.50 ns/op with 1 ns = 1/1,000,000,000 s op ≈ 2.35270590588e-12 s ==== Extra ====
Itu keputusan yang baik. Mari semak fungsi rekursif untuk kedudukan 10:
// Results BenchmarkFibRecursive-8 6035011 187.8 ns/op PASS ok playground 1.882s
Kita dapat lihat bahawa ia mengambil masa 1.882s untuk menyelesaikan tugas itu.
Fungsi berulang dimenangi beberapa saat. Mari cuba satu lagi ujian dengan:
Kedudukan 50
// Results for the Iterative Function cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkFibIterative-8 27896118 45.37 ns/op PASS ok playground 2.876s // Results for the Recursive Function cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkFibRecursive-8 6365198 186.3 ns/op PASS ok playground 1.918s
Wah! Kini fungsi rekursif lebih pantas?
Mari kita selesaikan dengan nombor yang lebih besar sedikit.
Kedudukan 80
// Results for the Iterative Function cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkFibIterative-8 5102344 229.5 ns/op PASS ok playground 1.933s // Results for the Recursive Function // My poor PC couldn’t handle it, so I had to reduce the position to 50 just to get some results printed. cpu: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz BenchmarkFibRecursive-8 1 44319299474 ns/op PASS ok playground 44.951s
Perbezaan sangat besar. Untuk kedudukan 80, pendekatan berulang mengambil masa kira-kira 2 saat. Untuk kedudukan 50, fungsi rekursif mengambil masa sekitar 45 saat. Ini menunjukkan kepentingan menanda aras kod anda apabila projek Golang anda mula perlahan.
Kesimpulan
Jika kod pengeluaran anda berjalan perlahan atau lebih perlahan tanpa diduga, anda boleh menggunakan teknik ini, digabungkan dengan pprof atau alatan lain daripada pakej ujian terbina dalam, untuk mengenal pasti dan menguji prestasi kod anda kurang baik dan cara mengoptimumkannya.
Nota sampingan: tidak semua kod yang cantik di mata adalah lebih berprestasi.
Senaman Tambahan
Bolehkah anda mencari cara yang lebih baik untuk meningkatkan fungsi rekursif? (Petua: gunakan Pengaturcaraan Dinamik). Artikel ini menerangkan sebab untuk beberapa nombor kecil, strategi rekursif adalah lebih baik.
Atas ialah kandungan terperinci Penanda aras dengan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Ciri -ciri teras GO termasuk pengumpulan sampah, penyambungan statik dan sokongan konvensional. 1. Model keseragaman bahasa GO menyedari pengaturcaraan serentak yang cekap melalui goroutine dan saluran. 2. Antara muka dan polimorfisme dilaksanakan melalui kaedah antara muka, supaya jenis yang berbeza dapat diproses secara bersatu. 3. Penggunaan asas menunjukkan kecekapan definisi fungsi dan panggilan. 4. Dalam penggunaan lanjutan, kepingan memberikan fungsi saiz semula dinamik yang kuat. 5. Kesilapan umum seperti keadaan kaum dapat dikesan dan diselesaikan melalui perlumbaan getest. 6. Pengoptimuman prestasi menggunakan objek melalui sync.pool untuk mengurangkan tekanan pengumpulan sampah.

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Keliru mengenai penyortiran hasil pertanyaan SQL. Dalam proses pembelajaran SQL, anda sering menghadapi beberapa masalah yang mengelirukan. Baru-baru ini, penulis membaca "Asas Mick-SQL" ...

Hubungan antara konvergensi stack teknologi dan pemilihan teknologi dalam pembangunan perisian, pemilihan dan pengurusan susunan teknologi adalah isu yang sangat kritikal. Baru -baru ini, beberapa pembaca telah mencadangkan ...

Golang ...

Bagaimana membandingkan dan mengendalikan tiga struktur dalam bahasa Go. Dalam pengaturcaraan GO, kadang -kadang perlu untuk membandingkan perbezaan antara dua struktur dan menggunakan perbezaan ini kepada ...

Bagaimana untuk melihat pakej yang dipasang di seluruh dunia? Dalam proses membangun dengan bahasa Go, sering menggunakan ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa