免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

GO語言教案和ppt內容 go語言第一課

【golang詳解】go語言GMP(GPM)原理和調度

Goroutine調度是一個很復雜的機制,下面嘗試用簡單的語言描述一下Goroutine調度機制,想要對其有更深入的了解可以去研讀一下源碼。

在皮山等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站制作 網站設計制作按需網站策劃,公司網站建設,企業網站建設,品牌網站建設,成都營銷網站建設,外貿網站建設,皮山網站建設費用合理。

首先介紹一下GMP什么意思:

G ----------- goroutine: 即Go協程,每個go關鍵字都會創建一個協程。

M ---------- thread內核級線程,所有的G都要放在M上才能運行。

P ----------- processor處理器,調度G到M上,其維護了一個隊列,存儲了所有需要它來調度的G。

Goroutine 調度器P和 OS 調度器是通過 M 結合起來的,每個 M 都代表了 1 個內核線程,OS 調度器負責把內核線程分配到 CPU 的核上執行

模型圖:

避免頻繁的創建、銷毀線程,而是對線程的復用。

1)work stealing機制

當本線程無可運行的G時,嘗試從其他線程綁定的P偷取G,而不是銷毀線程。

2)hand off機制

當本線程M0因為G0進行系統調用阻塞時,線程釋放綁定的P,把P轉移給其他空閑的線程執行。進而某個空閑的M1獲取P,繼續執行P隊列中剩下的G。而M0由于陷入系統調用而進被阻塞,M1接替M0的工作,只要P不空閑,就可以保證充分利用CPU。M1的來源有可能是M的緩存池,也可能是新建的。當G0系統調用結束后,根據M0是否能獲取到P,將會將G0做不同的處理:

如果有空閑的P,則獲取一個P,繼續執行G0。

如果沒有空閑的P,則將G0放入全局隊列,等待被其他的P調度。然后M0將進入緩存池睡眠。

如下圖

GOMAXPROCS設置P的數量,最多有GOMAXPROCS個線程分布在多個CPU上同時運行

在Go中一個goroutine最多占用CPU 10ms,防止其他goroutine被餓死。

具體可以去看另一篇文章

【Golang詳解】go語言調度機制 搶占式調度

當創建一個新的G之后優先加入本地隊列,如果本地隊列滿了,會將本地隊列的G移動到全局隊列里面,當M執行work stealing從其他P偷不到G時,它可以從全局G隊列獲取G。

協程經歷過程

我們創建一個協程 go func()經歷過程如下圖:

說明:

這里有兩個存儲G的隊列,一個是局部調度器P的本地隊列、一個是全局G隊列。新創建的G會先保存在P的本地隊列中,如果P的本地隊列已經滿了就會保存在全局的隊列中;處理器本地隊列是一個使用數組構成的環形鏈表,它最多可以存儲 256 個待執行任務。

G只能運行在M中,一個M必須持有一個P,M與P是1:1的關系。M會從P的本地隊列彈出一個可執行狀態的G來執行,如果P的本地隊列為空,就會想其他的MP組合偷取一個可執行的G來執行;

一個M調度G執行的過程是一個循環機制;會一直從本地隊列或全局隊列中獲取G

上面說到P的個數默認等于CPU核數,每個M必須持有一個P才可以執行G,一般情況下M的個數會略大于P的個數,這多出來的M將會在G產生系統調用時發揮作用。類似線程池,Go也提供一個M的池子,需要時從池子中獲取,用完放回池子,不夠用時就再創建一個。

work-stealing調度算法:當M執行完了當前P的本地隊列隊列里的所有G后,P也不會就這么在那躺尸啥都不干,它會先嘗試從全局隊列隊列尋找G來執行,如果全局隊列為空,它會隨機挑選另外一個P,從它的隊列里中拿走一半的G到自己的隊列中執行。

如果一切正常,調度器會以上述的那種方式順暢地運行,但這個世界沒這么美好,總有意外發生,以下分析goroutine在兩種例外情況下的行為。

Go runtime會在下面的goroutine被阻塞的情況下運行另外一個goroutine:

用戶態阻塞/喚醒

當goroutine因為channel操作或者network I/O而阻塞時(實際上golang已經用netpoller實現了goroutine網絡I/O阻塞不會導致M被阻塞,僅阻塞G,這里僅僅是舉個栗子),對應的G會被放置到某個wait隊列(如channel的waitq),該G的狀態由_Gruning變為_Gwaitting,而M會跳過該G嘗試獲取并執行下一個G,如果此時沒有可運行的G供M運行,那么M將解綁P,并進入sleep狀態;當阻塞的G被另一端的G2喚醒時(比如channel的可讀/寫通知),G被標記為,嘗試加入G2所在P的runnext(runnext是線程下一個需要執行的 Goroutine。), 然后再是P的本地隊列和全局隊列。

系統調用阻塞

當M執行某一個G時候如果發生了阻塞操作,M會阻塞,如果當前有一些G在執行,調度器會把這個線程M從P中摘除,然后再創建一個新的操作系統的線程(如果有空閑的線程可用就復用空閑線程)來服務于這個P。當M系統調用結束時候,這個G會嘗試獲取一個空閑的P執行,并放入到這個P的本地隊列。如果獲取不到P,那么這個線程M變成休眠狀態, 加入到空閑線程中,然后這個G會被放入全局隊列中。

隊列輪轉

可見每個P維護著一個包含G的隊列,不考慮G進入系統調用或IO操作的情況下,P周期性的將G調度到M中執行,執行一小段時間,將上下文保存下來,然后將G放到隊列尾部,然后從隊列中重新取出一個G進行調度。

除了每個P維護的G隊列以外,還有一個全局的隊列,每個P會周期性地查看全局隊列中是否有G待運行并將其調度到M中執行,全局隊列中G的來源,主要有從系統調用中恢復的G。之所以P會周期性地查看全局隊列,也是為了防止全局隊列中的G被餓死。

除了每個P維護的G隊列以外,還有一個全局的隊列,每個P會周期性地查看全局隊列中是否有G待運行并將其調度到M中執行,全局隊列中G的來源,主要有從系統調用中恢復的G。之所以P會周期性地查看全局隊列,也是為了防止全局隊列中的G被餓死。

M0

M0是啟動程序后的編號為0的主線程,這個M對應的實例會在全局變量rutime.m0中,不需要在heap上分配,M0負責執行初始化操作和啟動第一個G,在之后M0就和其他的M一樣了

G0

G0是每次啟動一個M都會第一個創建的goroutine,G0僅用于負責調度G,G0不指向任何可執行的函數,每個M都會有一個自己的G0,在調度或系統調用時會使用G0的棧空間,全局變量的G0是M0的G0

一個G由于調度被中斷,此后如何恢復?

中斷的時候將寄存器里的棧信息,保存到自己的G對象里面。當再次輪到自己執行時,將自己保存的棧信息復制到寄存器里面,這樣就接著上次之后運行了。

我這里只是根據自己的理解進行了簡單的介紹,想要詳細了解有關GMP的底層原理可以去看Go調度器 G-P-M 模型的設計者的文檔或直接看源碼

參考: ()

()

GO語言(十三):使用 Go 和 Gin 開發 RESTful API(下)

當客戶端在 發出POST請求時/albums,您希望將請求正文中描述的專輯添加到現有專輯數據中。

為此,您將編寫以下內容:

1、編寫代碼

a.添加代碼以將專輯數據添加到專輯列表。

在此代碼中:

1)用于Context.BindJSON 將請求正文綁定到newAlbum。

2) album將從 JSON 初始化的結構附加到albums 切片。

3)向響應添加201狀態代碼,以及表示您添加的專輯的 JSON。

b.更改您的main函數,使其包含該router.POST函數,如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數相關聯。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關聯。這樣,您可以根據客戶端使用的方法將發送到單個路徑的請求單獨路由。

a.如果服務器從上一節開始仍在運行,請停止它。

b.從包含 main.go 的目錄中的命令行,運行代碼。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。

該命令應顯示添加專輯的標題和 JSON。

d.與上一節一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。

該命令應顯示專輯列表。

當客戶端向 發出請求時GET /albums/[id],您希望返回 ID 與id路徑參數匹配的專輯。

為此,您將:

a.在您在上一節中添加的函數下方postAlbums,粘貼以下代碼以檢索特定專輯。

此getAlbumByID函數將提取請求路徑中的 ID,然后找到匹配的專輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數。當您將此處理程序映射到路徑時,您將在路徑中包含參數的占位符。

(2)循環album切片中的結構,尋找其ID 字段值與id參數值匹配的結構。如果找到,則將該album結構序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應返回。

如上所述,實際使用中的服務可能會使用數據庫查詢來執行此查找。

(3)如果找不到專輯,則返回 HTTP 404錯誤。

b.最后,更改您的main,使其包含對router.GET的新調用,路徑現在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關聯。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數。

a.如果服務器從上一節開始仍在運行,請停止它。

b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務器。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發出請求。

該命令應顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務。

本節包含您使用本教程構建的應用程序的代碼。

《How do you go to school》英語教案及反思例子

做好小學 二年級英語 教案是英語老師備課的關鍵,下面我為大家帶來小學二年級英語上冊《How do you go to school》教案及 反思 ,供各位教師參考!

《How do you go to school》教案:課前準備

教學目標:

1.Knowledge and Ability Aim

(1)Learn and try to understand and read the words: by bus, walk to school, by car, by bike

(2)Learn the target sentences: How do you go to school?

(3)Try to talk about the ways of going to school in real-life situation. At the same time, raise the students’ language abilities.

2.Process and Methods Aim

Use Task-based Learning and Situation Learning .

3. Emotion Aim :Cooperate well and help with each other.

重點難點:

1.Key points

Talk about the ways of going to school in real-life situation by using the phrases: by bus, walk to school, by car, by bike and drill: How do you go to school?

2.Difficulties

How to use the new words and the drills to Talk about the ways of going to school freely and fluently in our daily life.

教學準備:

Tape-recorder, Cards, CAI

《How do you go to school》教案:教學過程

一、Warming up

1.Greetings: Class begins. Stand up! Good morning, boys and girls.

How are you?

Let’s chant: play----I play, you play, he plays, she plays, it plays.

go----I go, you go, he goes, she goes, it goes.

2.Free talk

①What time do you go to school?

②How do you go to school?

二、Task-presenting and preparing

1.Today I bring three friends to you, now look!(Show three head ornaments)

This is Amy. This is Lingling. And this is Tom. He is Amy’s little brother. Let’s listen, how do they go to school?

Open your books, turn to page 30, listen and point.

2.Let’s listen again, I will ask:

① If you were Amy, how do you go to school?

② If you were Lingling, how do you go to school?

③ Does Tom go to school by car?

3. After listening, answer the questions:

①If you were Amy, how do you go to school?

I go to school by bus./ She goes to school by bus.(Show CAI:

picture of bus and “by bus”, do action, read the phrase two by two, then boys and girls.)

②If you were Lingling, how do you go to school?

I walk to school./ She walks to school. (Show CAI: picture of walk and “walk to school”, do action, read the phrase two by two, then group by group.)

③Does Tom go to school by car? (Show CAI: picture of car and “by car”, do action, read the phrase two by two, then row by row.)

No, he doesn’t. He goes to school by bus.

4.Guess: How does Daming go to school?

He goes to school by bus. (Show CAI: picture of bike and “by bike”, do action, read the phrase two by two, then boys and girls)

5.Read the four phrases and do actions: by bus, walk, by car, by bike

Practise in groups.

6.Play a game between four groups:

Teacher does actions, students say.

Student does actions, students say.

7.Teacher asks, students answer: How do you go to school?

Then try to say: How do you go to school?

三、Practising and counseling

1. Look! A photo of me.(Show CAI) I go to work by bus. What’s meaning of “go to work”? Guess!

Read the phrase row by row, then together.

2.(Show head ornament)Look, a new friend. He is Lingling’s father.

I go to work by bus. Let’s listen! How does he go to work?

3. After listening, answer the question: How does he go to work?

4. Ask and answer: How does your father go to work?

5. Do you know : How does my father go to work? Guess!

He works in Shanghai.

He goes to work by ship. Read and do action.

6. The Olympic Game will be held in Beijing in 2008.

My sister wants to go to Beijing. How does she go to Beijing?

She goes to Beijing by plane. Read and do action.

She goes to Beijing by train. Read and do action.

7.Read the phrases and do actions:

By bus, walk to school, by car, by bike, by ship, by plane, by train

8.Play games: ① Teacher does actions, students say.

② Teacher shows CAI, students guess.

四、Task-fulfilling

1.Listen and point.

2.Listen and repeat.

3.Listen and circle some phrases and words.

4.Check the words and phrases.

5.Practise by the students.

6.Show students’ photos and say the ways of going to school.

五、Sum up and homework.

《How do you go to school》教學反思:

在開始新課之前,把這個單元前面所學的三課進行了復習,復習中發現孩子們對課文的對話內容比較熟悉,能回答出來,但落實到筆頭上有些欠缺。然后開始新課的學習。本課主要圍繞---How do you go to school ?---I go to school by… 這一主要句型展開,首先通過播放視頻,使學生對本課所學內容有了一個整體印象。在PPT上列出日常的交通工具復習原來學過的單詞,讓學生通過觀察和思考自己 總結 出:乘坐…交通工具是 短語 by +交通工具,并讓學生把筆記記在書上的相應位置,這樣學生的印象更深刻。同桌之間練習句型---How do you go to school ?---I go to school by..., 既鍛煉了學生的口語表達,也加強了對這一句型的記憶。離家近的同學是走路上學的,在PPT上出示走路的圖片:walk復習舊知,引出新短語on foot 。從而引出 句子 I walk to school/ I go to school on foot. 讓學生記筆記,在PPT上出示圖片練習句型--How do they / you go to school ? ---They go to school by .../on foot. 比較直觀。

然后做練習冊上的題讓孩子們作為鞏固,孩子們講題的時候時間有點長,以后要注意。這節課下來學生單獨思考的時間比較少,糾正發音不及時,課堂從趣味型向知識型轉換,學生有點不適應,以后得多磨練。在課堂上多給孩子們朗讀的時間和機會,及時糾正發音,既能鍛煉孩子們的口語能力,又能鍛煉孩子們的聽力能力,在這方面要加強。

猜你喜歡:

1. 《My school》教案及反思

2. 《Do you have any glue》教案及反思

3. 《Hello》教案及反思

4. 三年級上《Do You Have a Dog》教案及反思

5. 五年級《What did you do, Gogo?》教案及反思

6. 三年級上冊《Our school》教案及反思

Go語言設計與實現(上)

基本設計思路:

類型轉換、類型斷言、動態派發。iface,eface。

反射對象具有的方法:

編譯優化:

內部實現:

實現 Context 接口有以下幾個類型(空實現就忽略了):

互斥鎖的控制邏輯:

設計思路:

(以上為寫被讀阻塞,下面是讀被寫阻塞)

總結,讀寫鎖的設計還是非常巧妙的:

設計思路:

WaitGroup 有三個暴露的函數:

部件:

設計思路:

結構:

Once 只暴露了一個方法:

實現:

三個關鍵點:

細節:

讓多協程任務的開始執行時間可控(按順序或歸一)。(Context 是控制結束時間)

設計思路: 通過一個鎖和內置的 notifyList 隊列實現,Wait() 會生成票據,并將等待協程信息加入鏈表中,等待控制協程中發送信號通知一個(Signal())或所有(Boardcast())等待者(內部實現是通過票據通知的)來控制協程解除阻塞。

暴露四個函數:

實現細節:

部件:

包: golang.org/x/sync/errgroup

作用:開啟 func() error 函數簽名的協程,在同 Group 下協程并發執行過程并收集首次 err 錯誤。通過 Context 的傳入,還可以控制在首次 err 出現時就終止組內各協程。

設計思路:

結構:

暴露的方法:

實現細節:

注意問題:

包: "golang.org/x/sync/semaphore"

作用:排隊借資源(如錢,有借有還)的一種場景。此包相當于對底層信號量的一種暴露。

設計思路:有一定數量的資源 Weight,每一個 waiter 攜帶一個 channel 和要借的數量 n。通過隊列排隊執行借貸。

結構:

暴露方法:

細節:

部件:

細節:

包: "golang.org/x/sync/singleflight"

作用:防擊穿。瞬時的相同請求只調用一次,response 被所有相同請求共享。

設計思路:按請求的 key 分組(一個 *call 是一個組,用 map 映射存儲組),每個組只進行一次訪問,組內每個協程會獲得對應結果的一個拷貝。

結構:

邏輯:

細節:

部件:

如有錯誤,請批評指正。

網站欄目:GO語言教案和ppt內容 go語言第一課
轉載來于:http://m.newbst.com/article24/ddojeje.html

成都網站建設公司_創新互聯,為您提供建站公司面包屑導航網站設計公司ChatGPT外貿網站建設外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化