獵聘網網站誰做的/上海關鍵詞seo
goroutine? 看一個需求
需求:要求統(tǒng)計1-200000000000的數字中,哪些是素數?
分析思路:
1)傳統(tǒng)的方法,就是使用一個循環(huán),循環(huán)的判斷各個數是不是素數(一個任務就分配給一個cpu去做,這樣很不劃算,而且非常慢)
2)使用并發(fā)或者并行的方式,將統(tǒng)計素數的任務分配給多個goroutine去完成,這時就會使用到goroutine(速度和核數有關)
goroutine可以做一個并發(fā)和并行處理,可以讓一個很大的任務分解到各個goroutine去完成。
?
進程和線程說明
1)進程就是程序程序在操作系統(tǒng)中的一次執(zhí)行過程,是系統(tǒng)進行資源分配和調度的基本單位
2)線程是進程的一個執(zhí)行實例,是程序執(zhí)行的最小單元,它是比進程更小的能獨立運行的基本單位。
3)一個進程可以創(chuàng)建核銷毀多個線程,同一個進程中的多個線程可以并發(fā)執(zhí)行。
4)一個程序至少有一個進程,一個進程,至少有一個線程
雙擊迅雷就會啟動一個進程,一個迅雷可以下載多個文件。每個下載任務可以看成一個線程,這樣才能夠發(fā)揮cpu最大的一個性能。
并發(fā),不適并行,從效果上說好像是5個同時下載,其實就是時間片很短,從微觀的角度看其實就是一個時間點只有一個文件在下載。
?
?
?
并發(fā)和并行
1)多線程程序在單核上運行,就是并發(fā)
2)多線程程序在多核上運行,就是并行
并發(fā):因為是在一個cpu上,比如有10個線程,每個線程執(zhí)行10毫秒(進行輪詢操作),從人的角度看,好像這10個線程都在運行,但是從微觀上看,在某一個時間點看,其實只有一個線程在執(zhí)行,這就是并發(fā)。
并行:因為是在多個cpu上(比如有10個cpu),比如有10個線程,每個線程執(zhí)行10毫秒(各自在不同cpu上執(zhí)行),從人的角度看,這10個線程都在運行,但是從微觀上看,在某一個時間點看,也同時有10個線程在執(zhí)行,這就是并行
傳統(tǒng)的編程語言,即使有多任務也是分配在一個cpu上面的,這樣多核是不能發(fā)揮威力。
go語言就是要將并發(fā)轉化為并行。