成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go Channel應(yīng)用系列之控制協(xié)程數(shù)量

開發(fā) 前端
我們在for循環(huán)中雖然一直在不停的啟用協(xié)程,但能夠運(yùn)行的協(xié)程數(shù)量不會超過10個。這樣利用了通道的阻塞特定,不用加鎖就能實(shí)現(xiàn)控制協(xié)程數(shù)量的目的。

大家好,我是漁夫子。

今天給大家介紹一下如何利用go中的緩沖channel來控制協(xié)程的數(shù)量。如下示例:

package main

import (
    "fmt"
    "sync/atomic"
)

func main() {
    sem := make(chan struct{}, 10)
    var count int32
    for {
       //time.Sleep(5*time.Millisecond)
       go func() {
          sem <- struct{}{}
          atomic.AddInt32(&count, 1)
          defer func() {
             <-sem
             atomic.AddInt32(&count, -1)
         }()

          fmt.Printf("count is :%d\n", count)
      }()
   }
    
}

在這個示例中,我們首先在for外層初始化了一個緩沖channel:sem,該channel可以存放10個元素。在for循環(huán)中我們不停的啟動協(xié)程。在協(xié)程中我們嘗試往sem中發(fā)送元素,如果發(fā)送成功,就運(yùn)行后面的邏輯,如果發(fā)送不成功,即sem空間已經(jīng)滿了,就利用channel的堵塞特性,該協(xié)程在這里堵塞等待。最后等某個協(xié)程運(yùn)行完畢后,從通道sem中輸出一個元素,這樣就騰出來一個空間,讓堵塞的一個協(xié)程繼續(xù)運(yùn)行了。

這樣,我們在for循環(huán)中雖然一直在不停的啟用協(xié)程,但能夠運(yùn)行的協(xié)程數(shù)量不會超過10個。這樣利用了通道的阻塞特定,不用加鎖就能實(shí)現(xiàn)控制協(xié)程數(shù)量的目的。

應(yīng)用示例

在之前我們推薦過一個爬蟲的開源項(xiàng)目:Geziyor。這個項(xiàng)目中就使用了這種方式來控制并發(fā)請求的數(shù)量。我們看下源代碼:首先,在初始化的地方,先根據(jù)并發(fā)個數(shù)來初始化了一個緩沖通道,示例代碼看源碼第109行

圖片圖片

然后,在Start函數(shù)中,循環(huán)啟動每一個采集的任務(wù)。源代碼中的106行Start函數(shù),如下:

圖片圖片

然后,在源代碼的第220行,則啟動任務(wù)協(xié)程,在任務(wù)協(xié)程中首先通過acquireSem函數(shù)往通道中發(fā)送一個消息,如果發(fā)送不成功就堵塞在這里,直到其他協(xié)程通過releaseSem釋放通道中的一個空間出來。如下:

圖片圖片

好了,今天緩沖通道的其中應(yīng)用場景就分享到這里。

責(zé)任編輯:武曉燕 來源: Go學(xué)堂
相關(guān)推薦

2023-07-27 13:46:10

go開源項(xiàng)目

2024-07-01 08:44:42

Go語言協(xié)程

2016-10-28 17:39:47

phpgolangcoroutine

2021-05-21 08:21:57

Go語言基礎(chǔ)技術(shù)

2025-06-03 00:00:02

Go協(xié)程鎖機(jī)制

2018-12-04 14:00:41

協(xié)程編程模式PHP

2024-12-03 15:15:22

2020-12-27 10:15:44

Go語言channel管道

2021-04-25 09:36:20

Go協(xié)程線程

2024-06-27 07:56:49

2021-05-20 09:14:09

Kotlin協(xié)程掛起和恢復(fù)

2024-05-29 08:05:15

Go協(xié)程通信

2025-02-28 09:04:08

2021-09-16 09:59:13

PythonJavaScript代碼

2022-10-28 10:45:22

Go協(xié)程GoFrame

2022-09-12 06:35:00

C++協(xié)程協(xié)程狀態(tài)

2021-08-04 16:19:55

AndroidKotin協(xié)程Coroutines

2024-08-27 09:46:39

Go協(xié)程效率

2023-03-09 09:06:13

ChanneGo開發(fā)

2023-11-17 11:36:59

協(xié)程纖程操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲欧洲精品一区 | 亚洲视频中文字幕 | 久久久久久久av麻豆果冻 | 福利社午夜影院 | 中文字幕综合 | a级大毛片 | 在线免费毛片 | 毛片久久久 | 免费在线观看成人 | 欧美 中文字幕 | 国产成人精品久久久 | 成人黄色电影在线观看 | 成人精品国产 | 日韩1区2区 | 国产一级片在线观看视频 | 国产精品黄 | 狠狠操天天操 | 国产精品一区二区av | 成人av资源在线 | 欧美精品福利 | 久久偷人 | 一区二区日韩 | 伊人久久免费视频 | 国产精品黄色 | 日韩专区中文字幕 | 久久亚洲国产 | 亚洲高清在线 | 自拍偷拍第一页 | 亚洲精品在线国产 | 日韩中文字幕免费 | 欧美一卡二卡在线 | 欧美日韩网站 | 91精品国产91久久综合桃花 | 久草在线 | 欧美激情视频一区二区三区免费 | 成人国产在线视频 | 美国av毛片| 在线观看国产wwwa级羞羞视频 | a在线观看免费 | 精品视频一区二区三区 | 日韩在线免费视频 |