php小編西瓜為您介紹Golang中的並發、並行和順序三個重要概念。在並發程式設計中,Golang提供了豐富的工具和語法來實現並發操作,使得程式能夠同時處理多個任務。而平行程式設計則是同時執行多個任務,透過利用多核心處理器來提高程式的執行效率。順序編程則是依照程式碼的順序依序執行,適用於需要確保任務依照特定順序執行的場景。透過靈活運用這三個概念,開發者可以充分發揮Golang在高並發場景下的優勢,提升程式的效能和效率。
我現在正在學習 Go,並且對並發、並行和順序之間的區別感到非常沮喪。
假設我們有一個流程,可以截取 5 個 URL 的片段並將內容貼到文字檔案中。每個 URL 該過程需要 2 秒。
直到這裡我都不確定我是否正確。我的問題是:
我讀到並行性可以同時做事情(例如跑步和聽音樂),而並發可以同時處理事情(例如在熨燙襯衫的同時完成早餐)。
但如果是這樣的話,為什麼並發不需要 10 秒才能完成,因為在一天結束時,您並不是同時做所有事情,而是只做所有事情的一部分,直到完成所有事情?
這裡用一個類比來解釋。
你需要煎 5 顆雞蛋,單面朝上。要煮雞蛋,您可以將雞蛋打到煎鍋上,等待幾分鐘,然後將其取下。
順序方法是先煎第一個雞蛋,然後再煎第二個雞蛋,依此類推,直到煎出 5 個雞蛋。
並行的方法是僱用 5 名廚師,讓他們每人煎一個雞蛋,然後等到他們全部完成。
並行方法是您自己按照實際做法親自烹飪所有 5 個雞蛋。也就是說,您快速將每個雞蛋打入鍋中,然後在準備好後將每個雞蛋取出。
您無需僱用 5 名廚師即可節省時間的原因是,廚師的數量並不會限制您的速度。煮一個雞蛋需要幾分鐘,但在開始和結束時只佔用你的注意力和雙手幾秒鐘。
Go 運行時和現代作業系統運作時同樣智慧。他們知道,當您的執行緒等待接收網路回應時,處理器可以尋找其他事物來佔據其註意力。
並發性的大局主要不在於處理器的數量,而在於整體上的資源爭用。任務的執行需要資源,我們無法使用超出可用資源的資源。處理器是一種資源,但還有記憶體儲存、記憶體頻寬、網路頻寬、檔案句柄等等。
以上是Golang - 並發、並行、順序的詳細內容。更多資訊請關注PHP中文網其他相關文章!