当前位置: 首页 > 面试题库 >

填充缓冲的chan直到变满或持续一段时间

贺景铄
2023-03-14
问题内容

我有一个chan string缓冲的,我一直用随机字符串填充它,直到time.Duration过去或直到它变满为止。

我的问题是,考虑到它是一次性任务,还是应该采用更便捷的方式,我是否应该为此使用股票报价器?

这是我目前的做法

package main

import (
    "fmt"
    "time"
)

func main() {
    res := fillChan(time.Duration(1*time.Nanosecond), 100000)
    fmt.Println(len(res))
}

func fillChan(maxDuration time.Duration, chanSize int) chan string {
    c := make(chan string, chanSize)

    ticker := time.NewTicker(maxDuration)

    for {
        select {
        case <-ticker.C:
            ticker.Stop()
            return c
        case c <- "Random message":
        default:
            return c
        }
    }

}

问题答案:

我不是Go方面的专家(实际上,我从未使用过它),但是文档建议Timer或仅After针对单个事件。

select {
case <-time.After(1*time.Nanosecond):
    return c
case c <- "Random message":
default:
    return c
}


 类似资料:
  • 我已经在网上搜索了几天这种现象,我可以找到一个类似问题的片段,这表明可能与底层的InputStreamReader和/或StreamDecoder有关,但这开始超出了我的专业知识。(见本链接) 所以我的问题是,我是否正确地实现了BufferedReader,以及如何解决我所看到的问题,以便在没有不必要的延迟的情况下获得每一行。

  • 问题内容: 在编写用于OpenGL库的Matrix类时,我遇到了一个问题,即使用Java数组还是使用Buffer策略存储数据(JOGL为Matrix操作提供直接缓冲区复制)。为了对此进行分析,我编写了一个小型性能测试程序,该程序比较了Arrays vs Buffers和Direct Buffers上循环和批量操作的相对速度。 我想在这里与您分享我的结果(因为我发现它们很有趣)。请随时发表评论和/或

  • 所以我必须在eclipse中为我的类创建一个java项目。分配是创建一个程序,允许用户在程序中输入整数,直到输入某个整数(42)。输入整数(42)后,程序将为1。平均输入的所有数字。2、显示输入的最小值和最大值。3、输入的数字总数。这些必须在不计算(42)的情况下进行计算。这就是我目前所拥有的。我可以从用户那里获得输入,一旦他们输入42,程序就会停止并显示总数,但包括42。我不知道如何为输入添加一

  • 我有2个xml配置文件,如下所示 app-context.xml: test-cache.xml

  • 问题内容: 这是我要弄清楚的一个片段: 有一个接受来自外部的事件。有一个订阅该主题的客户端,可以处理事件并对其进行处理。这里的主要思想是,应基于使用流中的项目计算出的某些条件,每次都发出缓冲的项目。 为此,缓冲区边界本身会监听主体。 一项重要的期望行为:每当边界发射该项目时,也应将其包括在以下的发射中。当前配置不是这种情况,因为该项目(至少是我认为的)是 在 它到达 之前 从关闭选择器发出的,因此

  • 如果没有指定,但给定mp4视频的内容长度和索引范围,如何确定MPD文件中的片段持续时间?例如,如下所示的mpd文件(http://dash.edgesuite.net/akamai/streamroot/050714/Spring_4Ktest.mpd): 非常感谢你! 闪耀