国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

linux 國(guó)外網(wǎng)站網(wǎng)站建設(shè)蘇州

linux 國(guó)外網(wǎng)站,網(wǎng)站建設(shè)蘇州,做網(wǎng)站被抓,電子商務(wù)平臺(tái)中搜索詞拆解包括什么協(xié)程 在Go語(yǔ)言中,協(xié)程就是一種輕量的線(xiàn)程,是并發(fā)編程的單元,由Go來(lái)管理,所以在GO層面的協(xié)程會(huì)更加的輕量、高效、開(kāi)銷(xiāo)更小,并且更容易實(shí)現(xiàn)并發(fā)編程。 輕量級(jí)線(xiàn)程 Go語(yǔ)言中協(xié)程(線(xiàn)程)與傳…

什么協(xié)程

在Go語(yǔ)言中,協(xié)程就是一種輕量的線(xiàn)程,是并發(fā)編程的單元,由Go來(lái)管理,所以在GO層面的協(xié)程會(huì)更加的輕量、高效、開(kāi)銷(xiāo)更小,并且更容易實(shí)現(xiàn)并發(fā)編程。

輕量級(jí)線(xiàn)程

  1. Go語(yǔ)言中協(xié)程(線(xiàn)程)與傳統(tǒng)系統(tǒng)層面的線(xiàn)程相比,實(shí)在是太輕量了,能小到2kb
  2. 由于協(xié)程的輕量特性,可以更高效地利用系統(tǒng)資源。相較于傳統(tǒng)的線(xiàn)程,協(xié)程的創(chuàng)建和銷(xiāo)毀的開(kāi)銷(xiāo)更小,使得程序更具有擴(kuò)展性和性能優(yōu)勢(shì)。

Go自身管理

  1. 在 Go 中,這些工作由運(yùn)行時(shí)系統(tǒng)自動(dòng)完成。這樣我們就可以更專(zhuān)注于業(yè)務(wù)邏輯,而不必過(guò)多關(guān)心底層線(xiàn)程管理的細(xì)節(jié)。

并發(fā)的基本單元

  1. 協(xié)程是并發(fā)編程的基本單元,可以同時(shí)執(zhí)行多個(gè)協(xié)程,而它們之間的調(diào)度和切換由運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)。
  2. 在程序中更容易實(shí)現(xiàn)高效的并發(fā),處理多個(gè)任務(wù)而無(wú)需顯式地創(chuàng)建和管理線(xiàn)程。
  3. 使用協(xié)程,我們可以輕松地實(shí)現(xiàn)并發(fā)任務(wù),例如同時(shí)處理多個(gè)網(wǎng)絡(luò)請(qǐng)求、執(zhí)行后臺(tái)任務(wù)等。由于協(xié)程的輕量特性,可以創(chuàng)建數(shù)千甚至數(shù)百萬(wàn)個(gè)協(xié)程而不會(huì)造成系統(tǒng)負(fù)擔(dān)。

使用通道通信

  1. 協(xié)程之間可以通過(guò)通道進(jìn)行通信,這是一種在協(xié)程之間安全地傳遞數(shù)據(jù)和同步操作的機(jī)制。通道是一種強(qiáng)大的工具,用于協(xié)程之間的協(xié)作和數(shù)據(jù)傳遞。

協(xié)程的基本操作

創(chuàng)建協(xié)程

- 語(yǔ)法: `go 函數(shù)(函數(shù)列表)`
package main  import (  "fmt"  "time")  func Hello() {  fmt.Println("hello world")  
}  func main() {  go Hello()  fmt.Println("hello main")  time.Sleep(10 * time.Second)  
}

協(xié)程與主線(xiàn)程是并發(fā)執(zhí)行的。

協(xié)程間通行

  • 主要通過(guò)channel來(lái)實(shí)現(xiàn)的
package main  import (  "fmt"  
)  func sendMessage(ch chan string, msg string) {  ch <- msg  
}  func main() {  messagechan := make(chan string)  go sendMessage(messagechan, "Hello World")  msg := <-messagechan  fmt.Println(msg)  
}

協(xié)程間的同步

  • 使用sync包來(lái)實(shí)現(xiàn)的
  • waitgroup 是用來(lái)計(jì)數(shù)信號(hào)量的
package main  import (  "fmt"  "sync")  func worker(id int, wg *sync.WaitGroup) {  defer wg.Done()  fmt.Printf("worker %d starting\n", id)  fmt.Printf("worker %d done\n", id)  
}  func main() {  var wg sync.WaitGroup  for i := 1; i <= 10; i++ {  wg.Add(1)  go worker(i, &wg)  }  wg.Wait()  fmt.Printf("all workers done\n")  
}

waitgroup確保主線(xiàn)程等待所有協(xié)程完成

協(xié)程的錯(cuò)誤處理

  • 使用select語(yǔ)句和通道可以實(shí)現(xiàn)協(xié)程的錯(cuò)誤處理
package main  import (  "fmt"  "time")  func dosomething(ch chan string) {  time.Sleep(2 * time.Second)  ch <- "hello world"  
}  func main() {  ch := make(chan string)  go dosomething(ch)  select {  case msg := <-ch:  fmt.Println(msg)  case <-time.After(1 * time.Second):  fmt.Println("timeout")  }  
}

select?語(yǔ)句允許在多個(gè)通道操作中選擇一個(gè)可用的操作,可以用來(lái)處理協(xié)程的超時(shí)等情況。

協(xié)程的高級(jí)操作

協(xié)程池

  • 協(xié)程池是一組預(yù)先創(chuàng)建的協(xié)程,用于執(zhí)行并發(fā)任務(wù),可以避免頻繁創(chuàng)建和銷(xiāo)毀協(xié)程的開(kāi)銷(xiāo)。
  • 使用緩沖通道來(lái)實(shí)現(xiàn)協(xié)程池
package main  import (  "fmt"  "sync")  func worker(id int, jobs <-chan int, results chan<- int) {  for j := range jobs {  fmt.Println("worker", id, "started job", j)  results <- j * 2  }  
}  func main() {  const numJobs = 5  const numWorkers = 3  jobs := make(chan int, numJobs)  results := make(chan int, numJobs)  var wg sync.WaitGroup  for i := 1; i <= numWorkers; i++ {  wg.Add(1)  go func(i int) {  defer wg.Done()  worker(i, jobs, results)  }(i)  }  for j := 1; j <= 5; j++ {  jobs <- j  }  close(jobs)  go func() {  wg.Wait()  close(results)  }()  for result := range results {  fmt.Println("result", result)  }  
}

三個(gè)協(xié)程形成了協(xié)程池,從任務(wù)通道?jobs?中獲取任務(wù),處理后將結(jié)果發(fā)送到結(jié)果通道?results

超時(shí)控制

package main  import (  "fmt"  "time")  func dosomething(ch chan string) {  time.Sleep(2 * time.Second)  ch <- "hello world"  
}  func main() {  ch := make(chan string)  go dosomething(ch)  select {  case msg := <-ch:  fmt.Println(msg)  case <-time.After(1 * time.Second):  fmt.Println("timeout")  }  
}

time.After?創(chuàng)建一個(gè)計(jì)時(shí)器,如果在指定時(shí)間內(nèi)沒(méi)有從通道?ch?中接收到結(jié)果,就會(huì)觸發(fā)超時(shí)。

協(xié)程的取消

  • 使用?context?包提供的上下文(Context)來(lái)實(shí)現(xiàn)協(xié)程的取消。
package main  import (  "context"  "fmt"    "time")  func doSomething(ctx context.Context, ch chan string) {  select {  case <-ctx.Done():  ch <- "task completed successfully"  case <-time.After(1 * time.Second):  ch <- "task timed out"  }  
}  func main() {  ctx, cancel := context.WithCancel(context.Background())  defer cancel()  ch := make(chan string)  go doSomething(ctx, ch)  time.Sleep(2 * time.Second)  cancel()  result := <-ch  fmt.Println(result)  
}

通過(guò)調(diào)用?cancel?函數(shù)取消協(xié)程的執(zhí)行。

http://aloenet.com.cn/news/41673.html

相關(guān)文章:

  • 石家莊+網(wǎng)站建設(shè)近期的時(shí)事熱點(diǎn)或新聞事件
  • 南京高端網(wǎng)站建設(shè)公司網(wǎng)絡(luò)廣告一般是怎么收費(fèi)
  • 圖書(shū)館 網(wǎng)站建設(shè)2022拉人頭最暴利的app
  • 海南建設(shè)銀行官方網(wǎng)站縱橫seo
  • 濟(jì)南哪家公司做網(wǎng)站微信指數(shù)是搜索量嗎
  • 怎么做wordpress主題模板福州seo網(wǎng)絡(luò)推廣
  • 刷qq會(huì)員自己做網(wǎng)站杭州正規(guī)引流推廣公司
  • 石家莊做網(wǎng)站建設(shè)的公司排名百度公司的發(fā)展歷程
  • 免費(fèi)網(wǎng)站制作公司優(yōu)化網(wǎng)站排名軟件
  • 女子醫(yī)院網(wǎng)站設(shè)計(jì)怎么做欒城seo整站排名
  • 用rp怎么做網(wǎng)站按鈕下拉菜單免費(fèi)發(fā)廣告的網(wǎng)站大全
  • 網(wǎng)站建設(shè)排期什么是網(wǎng)站推廣?
  • 福州網(wǎng)站建設(shè)哪家好班級(jí)優(yōu)化大師免費(fèi)下載安裝
  • 政府網(wǎng)站html5媒體平臺(tái)
  • 動(dòng)態(tài)網(wǎng)站商品瀏覽怎么做seo流量排名軟件
  • 注冊(cè)深圳公司的好處惠州抖音seo策劃
  • 網(wǎng)站后臺(tái)無(wú)法審核怎么把網(wǎng)站排名排上去
  • 近期新冠感染情況吉林網(wǎng)站seo
  • 阿里云域名怎樣做網(wǎng)站百度直播推廣
  • 電商網(wǎng)站建設(shè)流程推廣方案是什么
  • 建設(shè)銀行論壇網(wǎng)站廈門(mén)seo搜索引擎優(yōu)化
  • xp做網(wǎng)站服務(wù)器seo創(chuàng)業(yè)
  • asp.net網(wǎng)站開(kāi)發(fā)流程手機(jī)維修培訓(xùn)班學(xué)校
  • 合肥企業(yè)做網(wǎng)站app制作費(fèi)用一覽表
  • 網(wǎng)站改版原則惠城網(wǎng)站設(shè)計(jì)
  • 什么軟件做高級(jí)網(wǎng)站網(wǎng)絡(luò)推廣企業(yè)
  • 微信小程序開(kāi)發(fā)技術(shù)棧c盤(pán)優(yōu)化大師
  • 網(wǎng)站關(guān)鍵詞推廣方案國(guó)產(chǎn)長(zhǎng)尾關(guān)鍵詞拘挖掘
  • 張家口網(wǎng)站開(kāi)發(fā)電子商務(wù)網(wǎng)站有哪些?
  • 網(wǎng)站面包屑導(dǎo)航設(shè)計(jì)即位置導(dǎo)航青島網(wǎng)絡(luò)科技公司排名