gpt4 book ai didi

go - BufferedWriter 在同时使用时不起作用

转载 作者:IT王子 更新时间:2023-10-29 02:30:53 24 4
gpt4 key购买 nike

我需要同时将大量数据从多个 goroutine(比如 30 个)写入文本文件。我所做的是:

workers.Add(core.Concurrency)
for i := 0; i < core.Concurrency; i++ {
go func() {
defer workers.Done()
writer := bufio.NewWriter(f)
defer writer.Flush()
a.Worker(workChan, writer)
}()
}

但这在某些情况下似乎不起作用。这里的 f*os.File 对象。在某些情况下,这根本不会写入文件,在某些情况下,它会写入一些数据,但不会在以后写入。行为非常不一致,也没有错误。

知道为什么会发生这种情况吗?

最佳答案

问题是你有多个 goroutines 试图一次写入一个文件,没有任何同步。这将导致不可预测的输出顺序,并可能丢失写入。在此基础上使用缓冲 I/O 只会帮助掩盖行为。

最好的解决方案是启动一个写入输出的 goroutine(带或不带缓冲 I/O,取决于您的需要),并让所有 worker 将要写入的数据发送到写入 goroutine一个 channel 。

关于go - BufferedWriter 在同时使用时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com