專案實戰:使用Go WaitGroup提升Golang並發效能
摘要:
在當今網路時代,高並發處理成為了各個系統開發中不可忽視的問題。 Golang作為一門支援高效並發的程式語言,擁有豐富的並發程式設計特性。本文透過實際專案場景,介紹如何使用Go WaitGroup來提升Golang的並發效能。以具體程式碼範例為線索,指導讀者在實戰中使用WaitGroup實現並發任務處理。
關鍵字:
Golang;並發效能;WaitGroup;實戰;程式碼範例
3.1 初始化WaitGroup
在主執行緒中,首先需要初始化一個WaitGroup物件。 WaitGroup物件透過Add方法來計數等待的任務數量。
var wg sync.WaitGroup
3.2 新增任務
在並發任務中,需要在goroutine中執行具體的任務,並在任務完成後透過Done方法來標記任務已完成。
wg.Add(1) // 增加一个任务计数 go func() { defer wg.Done() // 标记任务完成 // 执行具体任务 }()
3.3 等待任務完成
主執行緒透過呼叫Wait方法來等待所有的任務執行完成。
wg.Wait()
package main import ( "fmt" "io/ioutil" "net/http" "sync" ) func main() { urls := []string{"https://www.example.com/1", "https://www.example.com/2", "https://www.example.com/3"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() resp, err := http.Get(url) if err != nil { fmt.Printf("Failed to fetch %s: %v ", url, err) return } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { fmt.Printf("Failed to read response body from %s: %v ", url, err) return } err = ioutil.WriteFile("data/"+url, body, 0644) if err != nil { fmt.Printf("Failed to write file for %s: %v ", url, err) } }(url) } wg.Wait() fmt.Println("All tasks completed.") }
在上述範例程式碼中,我們使用WaitGroup來實現了從多個網址下載資料的並發處理。透過Add方法增加任務計數,透過Done方法標記任務完成,並透過Wait方法等待所有任務執行完成。這樣,我們就可以有效率地處理並發任務了。
參考文獻:
【文章字數:495】
以上是專案實戰:使用Go WaitGroup提升Golang並發效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!