Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阻塞队列和SocketChannel写入的流量控制_Java_Blockingqueue_Socketchannel - Fatal编程技术网

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

Java 阻塞队列和SocketChannel写入的流量控制,java,blockingqueue,socketchannel,Java,Blockingqueue,Socketchannel,我有一个阻塞队列,其中有多个写入程序正在写入。我想建立一个事务控制机制,比如说,每秒可以写入的写入程序不超过50个(或接近50个)。有什么办法可以实现吗 编辑1:使用SocketChannel写入方法也有类似的要求。也就是说,允许n个写入程序每秒写入。n的值各不相同。我不必为此担心 另一个编辑:我正在考虑使用循环屏障,我将每秒释放和重置。我走的方向对吗?我认为50个作者一个信号灯是不够的 例如,你能做的就是拥有一个票子池和一个发行它们的机制。池的大小允许您规定写入程序的最大数量,以及允许您控制流

我有一个阻塞队列,其中有多个写入程序正在写入。我想建立一个事务控制机制,比如说,每秒可以写入的写入程序不超过50个(或接近50个)。有什么办法可以实现吗

编辑1:使用SocketChannel写入方法也有类似的要求。也就是说,允许n个写入程序每秒写入。n的值各不相同。我不必为此担心


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

我认为50个作者一个信号灯是不够的

例如,你能做的就是拥有一个票子池和一个发行它们的机制。池的大小允许您规定写入程序的最大数量,以及允许您控制流的发布机制

基本上,流程是这样的:

  • 一个作家要一张票。您可以使用一个信号量来锁定其他线程的访问,同时给wrjter一个票证
  • 一旦写入程序有了票据,它就会写入缓冲区
  • 写入程序返回票证(同样,您可以使用信号量来控制对此部分的访问,以便在任何一个时间点写入程序请求或返回其票证)

  • 最后,我混合了两种解决方案来实现我想要的。我使用有界信号量在任何时间点限制写入程序,并使用定时循环屏障来帮助我定义每秒的总写入量。

    到目前为止您尝试了什么?@npinti,我想不出任何方法来限制每秒的流量。尽管如此,如果我可以选择在任何时候限制流量,那么我可以使用信号量。有什么指针可以让它在这个时间范围内工作吗?只要重写add方法使其睡眠20ms。@EJP,循环屏障呢?更新了我的问题。我的建议呢?我不明白为什么我应该被要求对所有其他建议进行辩论。@AbhashUpadhyaya发行机制将跟踪这一点。