동시 파일 읽기: goroutine을 생성하여 데이터 블록을 동시에 읽고 파이프라인 통신 조정을 사용합니다. 동시 파일 쓰기: goroutine을 사용하여 데이터를 쓰고 뮤텍스를 사용하여 쓰기 작업을 보호합니다.
Golang에서 파일을 동시에 읽고 쓰는 방법은 무엇입니까?
파일 I/O 동시 처리는 Golang 프로그램의 성능을 향상시키는 일반적인 기술입니다. 동시 액세스를 사용하면 한 작업이 완료될 때까지 기다리지 않고 다른 작업을 시작하는 대신 동시에 데이터를 읽고 쓸 수 있습니다. 이 기사에서는 goroutine을 사용하여 Golang에서 동시에 파일을 읽고 쓰는 방법을 보여줍니다.
동시 읽기
파일을 동시에 읽으려면 여러 개의 고루틴을 생성할 수 있으며, 각 고루틴은 파일에서 데이터 블록을 읽습니다. 이러한 고루틴을 조정하기 위해 파이프를 사용하여 통신합니다.
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) }
동시 쓰기
파일에 대한 동시 쓰기의 경우 비슷한 접근 방식을 사용하지만 고루틴을 사용하여 데이터를 쓰고 뮤텍스를 사용하여 쓰기 작업에 대한 독점 액세스를 보장합니다.
아아아아위 내용은 Golang에서 동시에 파일을 읽고 쓰는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!