Slice Chunking in Go: Pendekatan Dioptimumkan
Untuk pemprosesan hirisan besar yang cekap, memotongnya menjadi hirisan yang lebih kecil dan boleh diurus boleh menjadi sangat berharga. Dalam Go, untuk mencapai potongan kepingan seimbang memerlukan pendekatan yang berbeza sedikit daripada pendekatan yang anda cuba.
Dalam kod anda, anda mengira saiz ketulan dengan betul menggunakan NumCPU dan panjang kepingan. Walau bagaimanapun, daripada membuat kepingan baharu, anda hanya boleh menambah kepingan log pada kepingan yang dibahagikan. Pengoptimuman ini memastikan bahawa memori tidak dibazirkan pada penyalinan data yang tidak diperlukan dan mengurangkan jejak memori keseluruhan.
Berikut ialah demonstrasi yang disemak semula:
import "fmt" var logs = make([]string, 2100000) // Simulate a slice with 2.1 million strings func main() { numCPU := runtime.NumCPU() chunkSize := (len(logs) + numCPU - 1) / numCPU var divided [][]string for i := 0; i < len(logs); i += chunkSize { end := i + chunkSize if end > len(logs) { end = len(logs) } divided = append(divided, logs[i:end]) } fmt.Printf("%#v\n", divided) }
Pendekatan yang dioptimumkan ini mengira saiz ketulan secara dinamik berdasarkan bilangan CPU dan panjang kepingan. Ia berulang di atas kepingan balak, menambahkan kepingan balak pada kepingan yang dibahagikan mengikut keperluan. Dengan mengelakkan penciptaan kepingan yang tidak perlu, penyelesaian ini meningkatkan prestasi dan penggunaan memori dengan ketara.
Sampel kod yang disediakan boleh diuji menggunakan taman permainan Go: http://play.golang.org/p/vyihJZlDVy
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Slice Chunking dalam Go untuk Pemprosesan Data Besar yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!