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. Мы сформулировали для себя цельную и главную миссию, которая стала нашим основным посланием – Диагностика, спасающая жизни. Это не просто слоган, а ориентира для всей деятельности нашей фирмы, которая ориентирована на создание и внедрение новых продуктов и решений, улучшающих диагностику заболеваний.

    Ценности нашей миссии

    Основой нашей миссии являются последующие ключевые ценности:

    – Забота о здоровье: Мы понимаем, что точная и своевременная диагностика может спасти жизнь. Поэтому каждая наша разработка нацелена на улучшение диагностических процессов автоматизация пробоподготовки в пао
    – Инновации: Мы стремимся к внедрению новейших технологий и способов, чтобы постоянно улучшать качество диагностики и расширять способности здравоохранения.
    – Фокус-покус на результате: Наша команда работает над тем, чтоб любая разработка, будь то прибор или программное обеспечение, давала точные и информативные результаты.

    Стратегия и направления работы

    Следуя нашему посланию, мы фокусируемся на последующих направлениях:

    – Исследования и разработки: Мы инвестируем в научные исследования и разработки, чтобы создавать современные диагностические инструменты, подходящие ожиданиям врачей и пациентов.
    – Партнёрство с медицинскими учреждениями: Мы активно сотрудничаем с медицинскими служащими, клиниками и научными центрами, чтоб превосходнее понимать потребности и строить продукты, которые вправду работают.
    – Обучение и поддержка: Мы считаем принципиальным предоставлять обучение и поддержку пользователям наших товаров, чтобы им предоставлялась возможность максимально эффективно использовать наши решения.

    Достижения и успехи

    Данный вектор позволил нам остаться сфокусированными на наших основных бизнес-задачах, добиться фуррора и создать новые продукты для рынков, на которых мы работаем. Мы гордимся тем вот, что наши разработки находят применение в разных областях медицины, подсобляя облагораживать качество диагностики и, в конечном счете, спасать жизни.

    Заключение

    Мы веруем в силу диагностики и продолжаем двигаться вперёд, творя инновационные решения для диагностики заболеваний. Наша миссия – это наш компас, который направляет нас для наихорошему будущему в области здравоохранения. Мы настроены на долгосрочные достижения и убеждены, что можем сделать мир лучше!

发表评论

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