阻塞队列和SocketChannel写入的流量控制

Flow control on blocking queue and SocketChannel write

我有一个阻塞队列,其中有多个写入者正在写入。我想在不超过 50 个写入者(或接近)每秒写入的地方放置一个事务控制机制。有什么办法可以实现吗?

编辑 1:使用 SocketChannel 写入方法也有类似的要求。那就是让n个writers每秒写。 n 的值变化。我不用担心。

另一个编辑:我正在考虑使用循环屏障,我将每秒释放并重置它。我的方向对吗?

我认为 50 位作者使用 1 个信号量不够。

您可以做的是,例如拥有一个票据池和一个发行票据的机制。池的大小将允许您规定最大编写器数量和发布它们的机制将允许您控制流量。

基本上,流程是这样的:

  1. 一位作家要求一张票。当 wrjter 获得票证时,您可以使用信号量对其他线程的访问进行 vlock。
  2. 一旦 writer 有了票,它就会写入缓冲区。
  3. 作者 returns 票(同样,您可以使用信号量来控制对此部分的访问,以便作者在任何时间点请求或返回票)。

最后我混合了两种解决方案来实现我想要的。我使用有界信号量在任何时间点限制编写器以及定时循环屏障,这帮助我定义了总数 writes/second.