Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membaca dan menulis fail serentak di Golang?

Bagaimana untuk membaca dan menulis fail serentak di Golang?

PHPz
PHPzasal
2024-06-05 18:12:001155semak imbas

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.

如何在 Golang 中并发读取和写入文件?

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.

rreeee

Atas 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn