首页 > 其他分享 >Golang 高效并发安全的字节池

Golang 高效并发安全的字节池

时间:2023-08-16 12:33:33浏览次数:41  
标签:字节 int sync Golang 并发 bp func byte BytePoolCap

记录一下,这里学的BytePoolCap, 和sync.Pool
总之就是这个BytePoolCap比sync.Pool快一些,目前不会测试,后面测试了再来填坑。

package main

import (
	"fmt"
)


func main() {
	//	var bpool BytePoolCap
	bp := NewBytePoolCap(500,1024,1024)
	buf := bp.Get()
	defer bp.Put(buf)
	fmt.Println()
}

type BytePoolCap struct {
	c chan []byte
	w int
	wcap int
}

func (bp *BytePoolCap) Get() (b []byte)  {
	select {
	case b = <- bp.c:
		// ?
	default:
		// create new buffer
		if bp.wcap > 0 {
			b = make([]byte, bp.w, bp.wcap)
		} else {
			b = make([]byte, bp.w)
		}
	}
	
	return
}

func (bp *BytePoolCap) Put(b []byte) {
	select {
	case bp.c <- b:
		// buffer went back into pool
	default:
		// buffer didn't go back into pool, just discard
	}
}

func NewBytePoolCap(maxSize int, width int, capWidth int) (bp *BytePoolCap) {
	return &BytePoolCap{
		c: make(chan []byte,maxSize),
		w: width,
		wcap: capWidth,
	}
}


标签:字节,int,sync,Golang,并发,bp,func,byte,BytePoolCap
From: https://www.cnblogs.com/pphboy/p/17633704.html

相关文章

  • Golang 语言学习路线
    学习Go语言是一个很好的选择,它具有高效的编译速度、强大的并发支持和简洁的语法。适用于初学者的Golang学习路线:1.学习基础:安装Go:从官方网站下载并安装Go语言的最新版本。Hello,World!:学习如何编写一个简单的HelloWorld程序,并运行它。基本语法:了解Go的基本语法,包括变量、常......
  • 初识Go(Golang)语言(2)
    初识Go(Golang)语言(2)Go开发工具的使用1.vscode使用直接下载vscode(免费软件),在内部下载golang语言插件,即可使用。2.JetBrains全家桶之(Goland[IDE]),永久免费"试用"。下方仅供参考,过期了就过期了。一般所有去哪佳通都可以使用。(个人推荐第二种) (1.)https://www.only4.work/blog/?id......
  • 并发与同步
    进程间的作用P、V操作不能实现共享PV操作不足不易读懂不利于修改和维护正确性难以保证可以用于线程tm的进程间的同步同步:一个进程在等待另一个进程给它发送消息一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定速度执行的过程称为进程间的同步 进......
  • 并发和GIL
    并发和GIL参考博客:Python的多进程和多线程Python中协程、多线程、多进程、GIL锁基于线程的并行基于进程的并行基础知识并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配......
  • 让 GPT-4 来修复 Golang “数据竞争”问题(续) - 每天5分钟玩转 GPT 编程系列(7)
    目录1.我以为2.阴魂不散的“数据竞争”问题3.老规矩,关门放GPT-43.1复现问题3.2让GPT-4写一个单元测试3.3修复Wait()中的逻辑漏洞4.总结1.我以为我以为GoPool这个项目会昙花一现,从此在GitHub上封尘。关于GoPool项目诞生的故事:《仅三天,我用GPT-4生成了性能......
  • 高效爬虫策略:利用HTTP代理实现请求合并与并发
    身为一名专业的爬虫程序员,我要跟大家分享一个超实用的技巧,就是怎么利用HTTP代理来实现高效的爬虫策略,同时实现请求合并和并发。听起来是不是就高端大气上档次?我给你们详细说说,让你们秒懂怎么搞定这玩意儿。首先,我们要理解一下为什么要用HTTP代理来实现这个高效策略。当......
  • Java并发编程:实现高效、线程安全的多线程应用
    Java并发编程是开发高效、可扩展的多线程应用的关键。合理地利用多线程可以提高程序的性能和响应性,但同时也会引入线程安全的问题。本文将介绍Java并发编程的关键技巧,帮助读者实现高效、线程安全的多线程应用。 线程安全的数据结构和类Java提供了许多线程安全的数据结构和类,如Co......
  • 驱动仅提供32位刷写的情况下如何完成刷写单数字节
    [Ooonly]前情提要:需要刷写一整个app程序,分包刷写,每包字节数为单数,要求CRC校验正确。(芯片底层提供32位全字刷写和16位半字刷写,驱动只整合了32位全字刷写函数)使用32位刷写函数出现的现象:通过keil5观察内存空间发现一包刷写成功一包刷写失败一包刷写成功...一直循环到末尾,刷写失败......
  • 数据库中,并发带来的问题
    脏读一个事务读取数据,并且对数据做了修改,这个i需改对其他事务来说是可见的,即使当时没有提交,这时另一个事务读取了这个还未提交的数据,但是第一个事务没成功,发生了回滚,导致数据并没有被提交到数据库,那么第二个事务读到的就是脏数据说白了就是一个事务读取了另一个事务1还未提交的......
  • 实战:工作中对并发问题的处理 | 京东物流技术团队
    1.问题背景问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。分拣业务针对每个快递包裹都会生成一个任务,我们称它为task。task中有两个字段需要关注,一个是分拣中发生的异常(exp_type),另一个是分拣任务的状态(status)。另外,需要关注分拣状态上报接口,通过......