Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk membaca dan menulis fail serentak di Golang?
Bacaan fail serentak: buat goroutine untuk membaca blok data secara serentak, dan gunakan penyelarasan komunikasi saluran paip untuk menulis fail serentak: gunakan goroutine untuk menulis data, dan gunakan mutex untuk melindungi operasi tulis.
Bagaimana untuk membaca dan menulis fail serentak di Golang?
Pemprosesan serentak fail I/O ialah teknik biasa untuk meningkatkan prestasi program Golang. Dengan akses serentak, kita boleh membaca dan menulis data secara serentak, dan bukannya menunggu satu operasi selesai sebelum memulakan operasi yang lain. Artikel ini akan menunjukkan cara menggunakan goroutine untuk membaca dan menulis fail serentak di Golang.
Bacaan Serentak
Untuk membaca fail secara serentak, kita boleh mencipta berbilang goroutine, setiap goroutine membaca blok data daripada fail. Untuk menyelaraskan goroutine ini, kami akan menggunakan paip untuk berkomunikasi.
package main import ( "bufio" "os" "fmt" "sync" "time" ) func readFile(filePath string, wg *sync.WaitGroup, ch chan<- string) { defer wg.Done() file, err := os.Open(filePath) if err != nil { fmt.Println(err) return } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { ch <- scanner.Text() } } func main() { // 创建一个容量为 10 的管道 ch := make(chan string, 10) // 等待组用于跟踪 goroutine var wg sync.WaitGroup filePath := "filename.txt" for i := 0; i < 10; i++ { wg.Add(1) go readFile(filePath, &wg, ch) } // 从管道中读取数据,并停止管道以等待所有 goroutine 完成 go func() { wg.Wait() close(ch) }() for data := range ch { fmt.Println(data) } // 等待管道数据完全输出 time.Sleep(1 * time.Second) }
Penulisan serentak
Untuk penulisan serentak ke fail, kami menggunakan pendekatan yang sama tetapi menggunakan goroutine untuk menulis data dan mutex untuk memastikan akses eksklusif kepada operasi tulis.
rreeeeAtas ialah kandungan terperinci Bagaimana untuk membaca dan menulis fail serentak di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!