【问题标题】:Purge the contents of a data container in real time实时清除数据容器的内容
【发布时间】:2012-09-17 15:39:03
【问题描述】:

下面的架构最好地解释了我的问题

基本上,我必须实时清除NSMutableData 对象(或任何其他对象)的内容,也就是说,我不能阻止它包含的线程。有没有办法/API 来做到这一点?

更新: 作为下面 cmets 中的 mentioned.. 我正在将音频包实时接收到主线程并立即将其路由到专用音频池线程..(原因为什么我有这么多线程是b / c我无法控制传入数据包的接收..它们是实时的+播放速度比接收数据的速度慢很多..因此单独的音频池线程和读者线程)

【问题讨论】:

  • “清除内容”是什么意思?
  • 这是一个基本的缓冲问题
  • @stackmonster purge the content 基本上意味着我要清除已经发送给它的数据。这里的技巧是在同一个线程中同时清除和写入数据..我不认为这是一个基本问题
  • 它非常基本。这不是一个伟大的设计
  • @stackmonster 这也不是一个很好的评论。这个问题是完全合理的,图表解释得很好。

标签: cocoa concurrency real-time nsmutabledata


【解决方案1】:

Circular buffers aka ring buffers 可以很好地与 NSMutableData 配合使用,因为您可以直接将字节数组用作缓冲区。

看看设计,我不明白为什么需要这么多缓冲区。似乎一个线程和两个缓冲区太多了。为什么不只拥有一个环形缓冲区,将其填满(它是“自我清除”)并在单独的线程中读取呢?设计是您的(即可以更改)还是强加给您的?

无论如何,请尝试为您的音频池使用环形缓冲区。

【讨论】:

  • 我考虑过环形缓冲区,环形缓冲区的问题在于,为了使其工作,缓冲区中的数据必须以几乎相同的速率产生和消耗 -> 哪种地址你问题的第二部分,这就是为什么我有太多线程?原因是我正在实时接收数据..所以我不能以任何方式阻止或限制它(我几乎需要一个专用线程,我不能让那个线程做任何其他可以减慢实时数据的接收速度,因此 MainThread 不好,因为它必须进行 UI 更新等)-->
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2011-03-05
相关资源
最近更新 更多