GO:傻瓜式並發與並行。

WBOY
發布: 2024-08-23 12:30:31
原創
583 人瀏覽過

歡迎來到這篇帶有貶義標題的貼文。
但是,在這篇文章中,我想以一種非常簡單的方式向您解釋程式設計的這兩個特徵是什麼,這次使用我最喜歡的程式語言GOLANG.

讓我們想像一個廚房:

煮飯:這代表一個任務。
廚師:他是加工者。
出席人數:

廚房裡有幾位廚師:每個人準備不同的菜餚。
在 Go 中:每個廚師都是一個 goroutine。雖然廚房(處理器)只有一台烤箱,但廚師們可以同時處理自己的菜餚,在等待烤箱可用的同時將時間花在其他任務上。
並行性:

各種烤箱:每個廚師都有自己的烤箱。
在 Go 中:如果我們有多個實體處理器,每個 goroutine 都可以在不同的處理器上運行,以真正的方式同時烹飪多個菜餚。

有什麼差別?

並發:即使在單一處理器上,任務也是交織執行的,給人一種並行的錯覺。
並行性:任務在多個處理器上同時運行,這顯著加快了進程。

如何在 Go 中使用它們?

Goroutines:它們就像輕線程。要建立 goroutine,我們只需在函數之前使用 go 關鍵字:

GO: Concurrencia vs Paralelismo Para Tontos.

讓我們來看一個如何在 golang 中使用 goroutine 的範例:

雷伊

通道:它們是 goroutine 可以進行通訊和同步的管道。
想像它們是在廚師之間傳遞食材的管子

雷伊

實際範例:

雷伊

此程式碼的輸出將是

雷伊

雖然有時它可能看起來像這樣

雷伊

或像這樣

雷伊

為什麼每次執行程式時輸出都會改變?

程式輸出每次運行都會改變的主要原因是並發的不確定性。

這是正在發生的事情的細分

建立通道:make(chan int) 建立一個整數通道。該通道將用於 goroutine 之間的通訊。

啟動 goroutine:循環 for i := 1;我 工作函數接收 ID 和通道。

送到通道:循環 n := 1; n 1到10送到通道。

關閉通道:close(c)呼叫關閉通道,表示不會再傳送任何值。

從通道接收值:每個 goroutine 使用 for n := range c 循環從通道接收值。當接收到一個值時,它會被印到控制台。

等待 Goroutine 完成: time.Sleep(time.Second) 呼叫確保主 Goroutine 等待其他 Goroutine 完成後再退出。

到目前為止:

我們創建了 5 個 goroutine(cooks),它們透過通道接收數字。
我們將號碼發送到頻道供廚師處理。
廚師們同時工作,在收到數據時進行處理。

為什麼在 Go 中使用並發和並行?

更好的效能:特別是在 I/O 密集型任務中(例如讀取檔案或發出 HTTP 請求)。
回應速度更快:任務鎖定時應用程式可以繼續回應其他請求。
更具可擴充性的架構:您可以跨多個核心或機器分配工作。

記住!

並發和並行性是強大的工具,但它們也會使程式碼更難以理解和調試。仔細使用它們並理解它們的含義很重要。

您想深入了解某個特定主題嗎?

我們可以探索以下概念:

同步:互斥體、工作小組等
並發模式:生產者-消費者、管道等
並發測試:如何有效測試並發程式碼。

問候,
盧卡托尼勞達爾斯

X/推特
GitHub

以上是GO:傻瓜式並發與並行。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!