Go Academy · Pelajaran

Detektor Race dan Pola Aman

Menggunakan flag -race dan menghindari race data

Pelajaran 4 dari 413 langkah

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 now

Pola 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
Gratis untuk memulai

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

  1. sync.Mutex dan sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once dan sync.Map
  4. Detektor Race dan Pola Aman
← Kembali ke Go Academy