首頁 > 後端開發 > Golang > 主體

Golang - 並發、並行、順序

王林
發布: 2024-02-09 22:00:10
轉載
1081 人瀏覽過

Golang - 并发、并行、顺序

php小編西瓜為您介紹Golang中的並發、並行和順序三個重要概念。在並發程式設計中,Golang提供了豐富的工具和語法來實現並發操作,使得程式能夠同時處理多個任務。而平行程式設計則是同時執行多個任務,透過利用多核心處理器來提高程式的執行效率。順序編程則是依照程式碼的順序依序執行,適用於需要確保任務依照特定順序執行的場景。透過靈活運用這三個概念,開發者可以充分發揮Golang在高並發場景下的優勢,提升程式的效能和效率。

問題內容

我現在正在學習 Go,並且對並發、並行和順序之間的區別感到非常沮喪。

假設我們有一個流程,可以截取 5 個 URL 的片段並將內容貼到文字檔案中。每個 URL 該過程需要 2 秒。

  • 依序 -> 需要 10 秒,因為它一個接一個地執行
  • 並行 -> 需要不到 10 秒的時間,因為它同時執行這些操作,但使用多個執行緒或處理器。
  • 並發 -> 花費的時間不到 10 秒,但不需要多個執行緒或處理器。

直到這裡我都不確定我是否正確。我的問題是:

我讀到並行性可以同時做事情(例如跑步和聽音樂),而並發可以同時處理事情(例如在熨燙襯衫的同時完成早餐)。

但如果是這樣的話,為什麼並發不需要 10 秒才能完成,因為在一天結束時,您並不是同時做所有事情,而是只做所有事情的一部分,直到完成所有事情?

解決方法

這裡用一個類比來解釋。

你需要煎 5 顆雞蛋,單面朝上。要煮雞蛋,您可以將雞蛋打到煎鍋上,等待幾分鐘,然後將其取下。

  • 順序方法是先煎第一個雞蛋,然後再煎第二個雞蛋,依此類推,直到煎出 5 個雞蛋。

  • 並行的方法是僱用 5 名廚師,讓他們每人煎一個雞蛋,然後等到他們全部完成。

  • 並行方法是您自己按照實際做法親自烹飪所有 5 個雞蛋。也就是說,您快速將每個雞蛋打入鍋中,然後在準備好後將每個雞蛋取出。

您無需僱用 5 名廚師即可節省時間的原因是,廚師的數量並不會限制您的速度。煮一個雞蛋需要幾分鐘,但在開始和結束時只佔用你的注意力和雙手幾秒鐘。

Go 運行時和現代作業系統運作時同樣智慧。他們知道,當您的執行緒等待接收網路回應時,處理器可以尋找其他事物來佔據其註意力。

並發性的大局主要不在於處理器的數量,而在於整體上的資源爭用。任務的執行需要資源,我們無法使用超出可用資源的資源。處理器是一種資源,但還有記憶體儲存、記憶體頻寬、網路頻寬、檔案句柄等等。

以上是Golang - 並發、並行、順序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板