gin go并发案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gin go并发案例相关的知识,希望对你有一定的参考价值。

参考技术A 通过管道进行处理机制

package main

import (

"fmt"

"github.com/gin-gonic/gin"

"io/ioutil"

"os"

"strconv"

)

var sema = make(chan struct,1)

func main()

r := gin.Default()

r.GET("/ping",func(c *gin.Context)

c.JSON(200, gin.H

"message":"pong",

)

)

r.GET("/test",func(context *gin.Context)

file2, _ := os.OpenFile("./3.txt", os.O_RDWR|os.O_APPEND,0766)

defer file2.Close()

file2.WriteString("11\r\n");

quUser()

getU()

context.JSON(200, gin.H

"message":"test",

)

)

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



func quUser() int

sema <-struct

data, err := ioutil.ReadFile("./2.txt")

if err != nil



balance, _ := strconv.Atoi(string(data))

balance = balance+1

  fmt.Println(balance,"存余额\r\n")

file, _ := os.OpenFile("./2.txt", os.O_RDWR,0766)

defer file.Close()

file.WriteString(strconv.Itoa(balance));

<-sema

return balance



func getU()

sema <-struct

data, err := ioutil.ReadFile("./2.txt")

if err != nil



balance, _ := strconv.Atoi(string(data))

fmt.Println(balance,"取余额\r\n")

<-sema

Go语言协程并发---条件变量案例《城管来啦》

package main

import (
	"fmt"
	"sync"
	"time"
)

/*
城管预警
·监听城管大队
·烧烤摊集群:监听城管大队,只要出动就发消息通知工会主席并进入阻塞等待至被唤醒,否则就提供露天烧烤
·公关专员:摆平城管大队,并广播通知所有烧烤摊主
*/

func main() {
	var dangerous = false
	cond := sync.NewCond(&sync.Mutex{})
	chDanger := make(chan string, 1)

	for i := 1; i <= 3; i++ {
		go func(index int) {
			for true {
				//只要城管出来,就等待起来
				cond.L.Lock()
				for dangerous==true{
					//发送预警
					select {
					case chDanger <- "城管来了!!":
						fmt.Println("城管来了!")
						fmt.Println(index,":蛰伏状态")
					default:
						//已经有人发过了
					}

					cond.Wait()
				}
				cond.L.Unlock()


				//城管没出来
				fmt.Println(index,":提供露天烧烤")
				time.Sleep(3*time.Second)
			}

		}(i)
	}

	go func() {
		for true {
			select {
			case <-chDanger:
				//帮大家平事儿
				cond.L.Lock()
				time.Sleep(3*time.Second)
				dangerous=false
				fmt.Println("事情已经摆平")
				cond.Broadcast()
				cond.L.Unlock()
			default:
				//日常生活
				fmt.Println("工会主席的日常幸福生活")
				dangerous=true
				time.Sleep(3*time.Second)
			}
		}
	}()

	time.Sleep(365*time.Second)
}

  

以上是关于gin go并发案例的主要内容,如果未能解决你的问题,请参考以下文章

煎鱼 Go Gin 系列十七:用Nginx部署Go应用

[转]Golang号称高并发,但高并发时性能不高

基于Go语言实现高并发推荐系统架构设计

4.16Go语言实现的千万级并发秒杀抢购系统原理揭秘

实战高并发大流量秒杀系统

实战高并发大流量秒杀系统