Go でのスライス チャンク化: 最適化されたアプローチ
大きなスライスを効率的に処理するには、スライスをより小さく管理しやすいスライスにチャンク化することが有益です。 Go でバランスの取れたスライス チャンクを実現するには、これまでに試みたアプローチとは少し異なるアプローチが必要です。
コードでは、NumCPU とスライス長を使用してチャンク サイズを正しく計算しています。ただし、新しいスライスを作成する代わりに、分割されたスライスにログのスライスを追加するだけで済みます。この最適化により、不必要なデータのコピーでメモリが無駄にならず、全体的なメモリ フットプリントが削減されます。
修正されたデモは次のとおりです:
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) }
この最適化されたアプローチは、次の情報に基づいてチャンク サイズを動的に計算します。 CPU の数とスライス長。ログ スライスを反復処理し、必要に応じて分割されたスライスにログのスライスを追加します。このソリューションは、不必要なスライスの作成を回避することで、パフォーマンスとメモリ使用量を大幅に改善します。
提供されたコード サンプルは、Go プレイグラウンドを使用してテストできます: http://play.golang.org/p/vyihJZlDVy
以上が大量のデータを効率的に処理するには、Go でスライス チャンクを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。