golang 的 go異步編程通道要注意的問題


golang 的 go異步編程通道要注意的問題

import (
	"database/sql"
	"fmt"
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"log"
	"time"
)

var Db *sql.DB


func main() {


	c1 := make(chan string)


	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {


		go say("wfe", c1)
		y := <-c1// 從通道 c 中接收


		c.JSON(200, gin.H{
			"message": y,
		})

	
	})
	
	r.Run(":8082") // listen and serve on 0.0.0.0:8080
}

  用了 

y := <-c1// 從通道 c 中接收
就會堵塞線程監聽 這個有點像消息隊列 直到接受完畢
如果你不想堵塞 直接用go 函數調用就行

一般不用他做消息隊列 cpu使用率上不去 並發量也低
所以go的通道一般情況下還是不要用了 畢竟並發量處理不好 因為他都要加鎖 進入1個通道加鎖 然后接受了 才解鎖 這樣才能保證隊列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM