golang用 channel简单高效队列

需求为先进先出原则,批量取出的缓存队列。要求比较简单,尝试开源queue代码,在压力大的情况下可能崩溃。使用redis做队列,CPU使用总量增长一倍多,IO开销也不小。最后用golang自带的channel,可以实现,简单高效,资源消耗也不大。

package main

import (
	"log"
	"os"
	"strconv"
	"time"
)

// 公共通道
// 通道数要比缓存最高数量大,以保证读取慢的情况下不会溢出
var Ch = make(chan string, 100000)

func wch(num int) {
	// 写入
	func() {
		if vv := recover(); vv != nil {
			os.Exit(0)
		}
	}()
	ws := strconv.Itoa(num)
	Ch <- ws
}

func rch() {
	// 读取
	var rs string
	for {
		select {
		case rs = <-Ch:
			log.Printf("read %v\n", rs)
		default:
			log.Printf("empty")
			return
		}
		if len(Ch) <= 0 {
			return
		}
		//Chsync.Done()
	}
}

func main() {
	var i int
	for i = 0; i < 200000; i++ {
		wch(i)
		if i%1000 == 0 {
			go rch()
			//Chsync.Add(1)
		}
	}
	time.Sleep(time.Millisecond * 6000)
	//Chsync.Wait()
	log.Printf("have %v", len(Ch))
}

0 thoughts on “golang用 channel简单高效队列

  1. 台湾的虚拟号码:通信技术的新时代

    近年来,技术进步正在迅速改变人们的沟通方式。 其中一项创新是虚拟号码的出现,为用户提供了新的沟通机会。 台湾作为亚洲领先的技术中心之一,正积极迎接这一趋势。

    什么是虚拟号码?

    虚拟号码是未链接到特定物理设备或位置的电话号码。 它可以在互联网上工作,可以在各种设备上使用,如智能手机,计算机甚至特殊应用程序。 这为用户开辟了全新的视野。

    虚拟房间在台湾的优势

    1. 灵活性:用户可以根据需要轻松更改他们的号码,这对企业特别有用。

    2. 节省:虚拟号码通常比传统号码便宜,特别是对于国际电话。 对于在国际市场运营的公司尤其如此。

    3. 安全性和匿名性:虚拟号码有助于保持隐私。 用户可以隐藏他们的真实号码,这对自由职业者和企业家尤其重要。

    4. 访问各种服务:大多数虚拟号码提供商提供额外的功能,如语音信箱,应答机和记录对话的能力。 http://www.rlalcn.cn/20240129/88341539.html

    对业务和通信的影响

    虚拟数字正成为台湾企业的重要工具。 它们使您能够有效地管理客户电话,确保高质量的服务。 此外,公司可以通过使用虚拟号码进入新市场来轻松扩大客户群。

    结论

    虚拟数字正在成为台湾和世界各地现代通信的一个组成部分. 通信技术的新时代为个人和企业开辟了新的机会和改变了沟通方式。 台湾凭借其高水平的技术和创新,处于这一转型的最前沿。

发表评论

电子邮件地址不会被公开。 必填项已用*标注