Detektor Race dan Pola Aman
Menggunakan flag -race dan menghindari race data
Detektor Race dan Pola Aman adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa itu perlombaan data?
Perlombaan data terjadi ketika dua goroutine mengakses lokasi memori yang sama secara bersamaan dan setidaknya salah satu akses merupakan penulisan, tanpa sinkronisasi. Perlombaan data menyebabkan perilaku yang tidak terdefinisi.
Mengaktifkan detektor perlombaan
Jalankan atau lakukan pengujian dengan -race untuk mengaktifkan detektor perlombaan bawaan Go:
go run -race main.go
go test -race ./...Keluaran detektor perlombaan
Ketika perlombaan terdeteksi, detektor mencetak jejak tumpukan goroutine yang menunjukkan akses yang saling bertentangan, lalu menghentikan program. Keluaran tersebut menunjukkan baris yang tepat dan terlibat.
Biaya kinerja
Detektor perlombaan menambahkan penggunaan memori sekitar 5–10× dan membuat eksekusi sekitar 2–20× lebih lambat. Jalankan detektor ini di CI dan lingkungan pengujian, bukan dalam build produksi.
Pola aman umum: operasi atomik
sync/atomic menyediakan operasi tanpa kunci untuk penghitung bilangan bulat sederhana dan pointer, sehingga menghindari biaya mutex penuh.
var counter int64
atomic.AddInt64(&counter, 1)
fmt.Println(atomic.LoadInt64(&counter))Pola aman umum: kepemilikan kanal
Hanya satu goroutine yang memiliki suatu nilai pada satu waktu; kepemilikan berpindah melalui kanal. Tanpa memori bersama, tidak ada perlombaan.
ch := make(chan []byte)
go func() { ch <- makeData() }()
data := <-ch // sole owner nowPola aman umum: data tak dapat diubah
Data hanya-baca yang dibagikan di antara goroutine aman digunakan. Lakukan semua penulisan sebelum goroutine dimulai atau sinkronkan penulisan tersebut. Nilai String dan [N]T aman dibagikan setelah dibuat.
Mendeteksi perlombaan dalam pengujian
Detektor perlombaan bekerja dengan go test -race. Tulis pengujian yang menjalankan jalur konkuren—detektor ini menangkap perlombaan yang tidak terlihat dalam pengujian berurutan yang berjalan tanpa masalah.
sync.atomic dibandingkan dengan mutex
Gunakan operasi atomik untuk pembaruan satu variabel (penghitung, penanda). Gunakan mutex untuk melindungi invarian yang mencakup beberapa variabel. Mencampurnya tanpa analisis yang cermat rentan menyebabkan kesalahan.
Hubungan terjadi-sebelum
Go menjamin hubungan terjadi-sebelum untuk operasi kanal, Mutex Lock/Unlock, dan sync.Once.Do. Operasi dalam goroutine yang sama diurutkan secara berurutan.
Berbagi cache palsu
Dua goroutine yang memperbarui memori berdekatan (bidang berbeda pada baris cache yang sama) dapat menyebabkan cache terus-menerus dimuat ulang. Tambahkan padding pada struct dengan [64]byte jika pembuatan profil menunjukkan perebutan akses pada struct tertentu.
Pemeriksaan singkat
Flag mana yang mengaktifkan detektor perlombaan Go?
Ringkasan: Detektor Perlombaan dan Pola Aman
Poin penting:
- Selalu jalankan go test -race di CI
- Pola aman: kanal, mutex, operasi atomik, dan data tak dapat diubah
- Keluaran detektor perlombaan menampilkan tumpukan goroutine yang tepat
- Jangan gunakan -race dalam build produksi
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Detektor Race dan Pola Aman” gratis?
Ya — teks lengkap “Detektor Race dan Pola Aman” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Detektor Race dan Pola Aman”?
Menggunakan flag -race dan menghindari race data Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Detektor Race dan Pola Aman” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- sync.Mutex dan sync.RWMutex
- sync.WaitGroup
- sync.Once dan sync.Map
- Detektor Race dan Pola Aman