中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

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

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

什么協(xié)程

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

輕量級線程

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

Go自身管理

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

并發(fā)的基本單元

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

使用通道通信

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

協(xié)程的基本操作

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

- 語法: `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é)程與主線程是并發(fā)執(zhí)行的。

協(xié)程間通行

  • 主要通過channel來實現(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包來實現(xiàn)的
  • waitgroup 是用來計數(shù)信號量的
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é)程完成

協(xié)程的錯誤處理

  • 使用select語句和通道可以實現(xiàn)協(xié)程的錯誤處理
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?語句允許在多個通道操作中選擇一個可用的操作,可以用來處理協(xié)程的超時等情況。

協(xié)程的高級操作

協(xié)程池

  • 協(xié)程池是一組預(yù)先創(chuàng)建的協(xié)程,用于執(zhí)行并發(fā)任務(wù),可以避免頻繁創(chuàng)建和銷毀協(xié)程的開銷。
  • 使用緩沖通道來實現(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)  }  
}

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

超時控制

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)建一個計時器,如果在指定時間內(nèi)沒有從通道?ch?中接收到結(jié)果,就會觸發(fā)超時。

協(xié)程的取消

  • 使用?context?包提供的上下文(Context)來實現(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)  
}

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

http://www.risenshineclean.com/news/41673.html

相關(guān)文章:

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