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