# concurrent_queue **Repository Path**: qitingrou/concurrent_queue ## Basic Information - **Project Name**: concurrent_queue - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-08-23 - **Last Updated**: 2024-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 实现并发队列 ### 场景分析 我们要设计一个并发队列,我们需要考虑什么因素: 1. 要不要考虑阻塞调用者的问题 - 如果队列中没有元素 - 如果队列满了 - 阻塞时间问题 2. 扩容:考虑大容量对GC的影响 3. 元素优先级问题 4. 线程安全问题 5. 持久化问题:应用关闭的时候,持久化数据,重启就恢复 6. 支持订阅模式 ### 功能需求 1. 用户可以控制最大容量 - 防止占用很多内存,影响GC - 要不要支持扩容机制 2. 控制住阻塞 - 没有数据,阻塞住拿数据的人,并且要控制住超时 - 队列满了,阻塞放数据的人,并且控制住超时 - 如果考虑扩容,应该怎么阻塞? ### 非功能需求 1. 性能问题 2. 公平性 ### 设计 1. 使用context.Context 来控制超时的理由: - context 天然支持,而且可以做到级联控制 - context 本身承载链路元数据,所以context是必不可少的 ~~~go ~~~ ### 知识点 1. sync.Cond