2015-11-23 56 views
2

我有一个阻塞队列,其中有多个写入者正在写入。我想把一个事务控制机制放在不超过50个编写者(或接近)每秒可写的地方。有没有办法实现它?阻塞队列和SocketChannel的流量控制写入

编辑1:使用SocketChannel写入方法有类似的要求。这是为了允许n位作者每秒写入数据。 n的值有所不同。我不必担心这一点。

另一个编辑:我想使用一个循环屏障,我将每秒发布&重置。我正确的方向吗?

+0

到目前为止您尝试了什么? – npinti

+0

@npinti,我想不出任何东西来限制每秒的流量。尽管如果我有任何时间限制流量的选项,那么我可以使用信号量。任何指针,使其工作在这个时间框架的事情? –

+1

只需重写add方法即可睡眠20ms。 – EJP

回答

0

最后我混合两种解决方案来实现我想要的。我使用有界的信号量来限制作家在任何时间点以及定时循环障碍,这有助于我定义总的写/秒。

0

我不认为50个作家的1个信号量就足够了。

你可以做什么,例如将有一个门票池和一个机制发布它们。池的大小将允许您规定最大数量的作者和发布它们的机制将允许您控制流程。

从本质上讲,流量会像这样:

  1. 作家请求票。当wrjter被授予票据时,您可以使用信号量为其他线程进行vlock访问。
  2. 一旦作家有一张票,它写入缓冲区。
  3. 作者返回票证(同样,您可以使用信号量来控制对此部分的访问权限,以便在任何一个时间点作者要求或返回票证)。
+0

此解决方案不适用于时间范围的事情。 –

+0

@AbhashUpadhyaya这是发布机制将追踪的内容。 – npinti