V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
doraemonki
V2EX  ›  Go 编程语言

Golang 中的 swap-buffer-queue

  •  1
     
  •   doraemonki · 132 天前 · 1308 次点击
    这是一个创建于 132 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我实现了一个通过交换缓冲区来提高并发性能的队列,在某些生产-消费者场景可以代替 go 内置的 channel 获得更高的性能。


    仅 200 多行代码,很容易理解。

    灵感来源于文章: 如何避免过度依赖 mpsc

    仓库地址

    6 条回复    2024-08-07 08:27:51 +08:00
    TrigVon
        1
    TrigVon  
       132 天前
    uiosun
        2
    uiosun  
       132 天前
    🥳

    @TrigVon 还以为你是 emoji ,没想到哈哈
    gerorim
        3
    gerorim  
       132 天前
    学习了。不过为啥有的 mutex.Unlock 有用 defer ,有的则没有 b.bufferMu.Unlock()。
    doraemonki
        4
    doraemonki  
    OP
       132 天前 via Android   ❤️ 1
    @gerorim 我想着尽量让 Lock 和 Unlock 靠近些就行了,没考虑这么多
    lysShub
        5
    lysShub  
       132 天前
    你那个 bench 应该不太对,ch 写入是会有阻塞的,而你那个直接 append ,只需要保证数据没有竞争,而不需要保证同步,相当于用内存换了时间
    doraemonki
        6
    doraemonki  
    OP
       132 天前
    @lysShub 其实把 ch 容量设置大些在不阻塞的情况下也是比 channel 快的,不过动态扩容也算一种特性了😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3153 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.