确定如何将大切片均匀分布为更小的块可能是在 Go 中处理大型数据集时的常见任务。本文探讨了一种对超过 200 万个字符串的切片进行分块的解决方案,确保均匀分布。
原始方法涉及确定每个块的起始和结束索引并将指定范围复制到新切片中。然而,这个解决方案导致第一个块被复制多次,使其无效。
要解决这个问题,避免创建新切片会更有效。相反,将相关的日志切片直接附加到划分的切片上。这种方法可确保均匀分布,而不会出现不必要的重复。
chunkSize := (len(logs) + numCPU - 1) / numCPU for i := 0; i < len(logs); i += chunkSize { end := i + chunkSize if end > len(logs) { end = len(logs) } divided = append(divided, logs[i:end]) }
此更新的解决方案将有效地将切片分成均匀分布的较小切片,容纳字符串和 CPU 核心的总数,以实现最佳性能。
以上是如何有效地将包含数百万字符串的大型 Go 切片分块以进行并行处理?的详细内容。更多信息请关注PHP中文网其他相关文章!