Go 語言透過 goroutine 實現並發性,協程是輕量級線程,透過 channel 通訊。重點如下:協程使用 go 關鍵字創建,並行執行。協程共享進程內存,透過 channel 通訊。在並發 Web 伺服器範例中,handler 函數使用 goroutine 並行處理請求。
並發性是同時執行多個任務的能力,而協程是一種輕量級線程,可以實現並發性。協程比執行緒更輕且消耗更少的資源。
Go 語言透過內建的 goroutine
實作並發性,它是一個並行執行的函數。使用go
關鍵字建立goroutine
:
func main() { go incrementCounter() } func incrementCounter() { // 并发地更新计数器 }
協程是使用者空間線程,它共享進程的記憶體空間。在 Go 中,協程可以透過 channel
進行通訊。
讓我們寫一個並發Web 伺服器,使用協程處理傳入請求:
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } func handler(w http.ResponseWriter, r *http.Request) { go func() { // 在协程中处理请求 fmt.Fprintf(w, "Hello from a goroutine!\n") }() }
在上述程式碼中,handler
函數使用go
關鍵字建立一個協程來處理傳入請求。協程並行運行,不會阻塞主執行緒。
sync
套件中的鎖定或原子變數來保護共享資料。 context.Context
來傳播取消請求。 以上是golang函數的並發與協程使用指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!