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

更新未读频道数据

元阳荣
2023-03-14
问题内容

有没有一种方法可以使用更多最新数据来更新发送到通道的未读数据?

我有一个goroutine(生产者),其频道提供了对另一个goroutine(消费者)的进度更新。在某些情况下,进度可以比消费者使用更新消息快得多。

这给我带来了问题,因为我可以:

  • 阻止将数据发送到通道。这意味着,如果使用者读取数据的速度较慢,则进度更新goroutine会完全阻塞-不应这样做。
  • 频道已满时,请勿阻止发送并跳过进度更新。这意味着使用者总是从数据中读取旧数据。

例如,我可能有这样的事情:

Progress reporting goroutine: Posts "1%" to channel Progress reporting goroutine: Posts "2%" to channel Progress reporting goroutine: Posts "3%" to channel Progress consuming goroutine: Reads "1%", "2%" and "3%" from channel. "1% and "2%" are outdated information.

有什么方法可以更新未读的频道数据吗?还是有解决此问题的更好方法?


问题答案:

您可以将某些值存储在受其保护的全局变量中,以RWMutex 保持进度。生成器更新它。消费者阅读和表演。

您也可以对长度为1的通道进行非阻塞写入:

var c = make(chan struct{}, 1)
select {
case c <- struct{}{}:
default:
}

这样,发送方要么向通道添加一个元素,要么如果通道已满就什么都不做。

读者将此空结构视为信号-它应在全局变量中获取更新的值。

另一种方式: 可更新的频道

var c = make(chan int, 1)
select {
case c <- value:  // channel was empty - ok

default: // channel if full - we have to delete a value from it with some precautions to not get locked in our own channel
    switch {
    case <- c: // read stale value and put a fresh one
         c <- value
    default: // consumer have read it - so skip and not get locked
     }
}


 类似资料:
  • 控制台-频道-更新 接口URL {youke-url}/console/Index.php?c=live&a=update&timestamp=1607677497&access_key=abc&sign=ae25e35ce1e8501eefbf55dc1521d32225b28a1c 请求方式 POST Content-Type form-data 请求Query参数 参数 示例值 是否必填 参

  • 问题内容: 我目前正在Linux系统上以python编写程序。目的是在发现特定字符串后读取日志文件并执行bash命令。日志文件正在被另一个程序不断写入。 我的问题 :如果使用该方法打开文件,我的Python文件对象将随着其他程序写入实际文件而更新,还是我必须在一定时间间隔内重新打开文件? 更新 :感谢到目前为止的答案。我也许应该提到,该文件是由Java EE应用程序写入的,所以我无法控制何时将数据

  • 我正在编写一个简单的Android应用程序,在该应用程序中,我使用ImageReader.onImageAvailableListener检索帧缓冲区,以获取最新的图像并处理Y平面。我使用这个平面来计算一个简单的度量,它的值将决定我是否在屏幕上显示某些东西。 我的问题是如何只处理和解释Y平面(我不需要U和V平面)。根据我的理解,Y平面包含亮度通道;即图像亮度的通道。 我的问题是,这些亮度值应该如何

  • 我正在尝试获取频道中所有视频的列表,使用playlistItems列表通过传递playlistId来获取所有视频。示例- 使用channels.listAPI调用获取频道上传播放列表的ID:GEThttps://www.googleapis.com/youtube/v3/channels?part=contentDetails 使用playlistItems.list调用获取上传播放列表中的视频:

  • 我是新来的反应。我被困在这件事上,真的很感激你的帮助! 父组件将把一个数组传递到这个子组件中。当我console.log(this.props.repairs)时,它显示了一个4的数组。每当传入修复数组时,我都试图更新this.state.SortedDataList。console.log(this.state)仍然将sortedDataList显示为空数组。 我做错了什么?非常感谢,谢谢你的帮

  • 我的xhtml中有下一个结构 方法searchAnimals()可以,它返回动物项,但dataTable不刷新,但在java代码(managedBean)中,ArrayList包含这些项。我能做什么?谢谢编辑:我正确地使用了de h:和p:后缀(我想是的),代码是完整代码的一部分,但它是无法正确工作的片段。在第一个面板中,我有一个过滤器控件(按类别、按日期等),命令按钮的功能是调用一个在数据库上执