golang 序列與並行(併發)對比

2021-10-23 13:23:15 字數 2539 閱讀 5662

golang對比其它語言最大的優勢就是乙個go關鍵字就能實現併發,工作中經常遇到併發的場景, 具體實現併發的方式有多種,今天就來做個小實驗來對比說明序列和並行執行任務中併發的優勢,好了直接上**

package main

import (

"fmt"

"math/rand"

"sync"

"time"

)//定義任務數量

var jobscount int = 10

func main()

//序列實現任務執行

func serial()

fmt.println("serial task done success ")

}//使用waitgroup 來實現等待併發完成

func parallel()

for i := 0; i < jobscount; i++ (i)

}wg.wait()

fmt.println("parallel task done success ")

}//使用chanel 來實現併發

func parallel2()

for i := 0; i < jobscount; i++

}//我是完成耗時工作的

func dotask(taskid int, ch chan int)

//測量函式執行時間

func timer(funcname string, f func())

這裡假設要完成十個耗時的任務,每個任務需要500ms或者隨機時間,分別用序列和兩個並行函式來完成; 

序列執行的順序就是每個任務執行完才能執行下個任務,並行執行就是十個任務同時執行不分先後(可以認為同時開始),

使用計時器對每個函式執行時間進行度量, 

main 啟動後,檢視控制台上結果的輸出:

hello  task 0 

hello task 1

hello task 2

hello task 3

hello task 4

hello task 5

hello task 6

hello task 7

hello task 8

hello task 9

serial task done success

serial fun cost 5.0042001s

hello task 9

hello task 4

hello task 5

hello task 6

hello task 7

hello task 8

hello task 2

hello task 0

hello task 3

hello task 1

parallel task done success

parallel fun cost 500.0504ms

task 9 doing !!!!!!!!!!!!!

task 4 doing !!!!!!!!!!!!!

task 3 doing !!!!!!!!!!!!!

task 6 doing !!!!!!!!!!!!!

task 7 doing !!!!!!!!!!!!!

task 8 doing !!!!!!!!!!!!!

task 1 doing !!!!!!!!!!!!!

task 0 doing !!!!!!!!!!!!!

task 2 doing !!!!!!!!!!!!!

task 5 doing !!!!!!!!!!!!!

task 3 done

task 4 done

task 1 done

task 9 done

task 2 done

task 0 done

task 7 done

task 8 done

task 6 done

task 5 done

parallel2 fun cost 500.3297ms

process finished with exit code 0

從控制台上我們可以看到序列執行的話,每個任務500ms ,總任務執行了5s ,

並行執行的話,兩個並行並沒有順序,每個任務500ms,總任務也可以認為是500ms,

序列的**10行,並行的**分別為 15行和20行 ,相比之下時間上後者是前者的1/10,這就是並行的巨大優勢,因此我們要多審視自己的**,避免偷懶,面對高併發場景下才能實現高效完成任務; 

新增迴圈中使用管道chanel的形式

//使用chan 接收等待任務完成(缺點:增加開銷)

func paralle3() (i)

}for i := 0; i < jobscount; i++

fmt.println("paralle3 task done success ")

}

golang 併發 並行

go 語言的執行緒是併發機制,不是並行機制。那麼,什麼是併發,什麼是並行?併發是不同的 塊交替執行,也就是交替可以做不同的事情。並行是不同的 塊同時執行,也就是同時可以做不同的事情。舉個生活化場景的例子 你正在家看書,忽然 來了,然後你接 通話完成後繼續看書,這就是併發,看書和接 交替做。如果 來了...

併發 並行 序列

併發是同時處理 dealing 很多的事情 並行是同時做 doing 很多的事情 併發是在同一實體上的多個事件 並行是在不同實體上的多個事件 併發處理都有排隊等候,喚醒,執行至少三個這樣的步驟.所以併發肯定是巨集觀概念,在微觀上他們都是序列被處理的,只不過資源不會在某乙個上被阻塞 一般是通過時間片輪...

序列,併發,並行。

序列 serial 並行 parallel 併發 concurrent 並行,序列與併發的區別 假如有個橋。假設1 這個橋比較脆弱,只能承受乙個人的重量,而橋的旁邊有個休息區則不限重量,走累了可以隨時停下來往右一靠,把橋讓出給別人。那麼兩個人a和b要同時過橋就應該 a先走,b看到a走累了到休息區的時...