编程语言
首页 > 编程语言> > Java:具有长期使用者的并发队列以及短期生产者的处理保证

Java:具有长期使用者的并发队列以及短期生产者的处理保证

作者:互联网

我正在寻找一个并发队列的现有实现,可以用来实现典型的生产者 – 消费者模式,但需要注意以下几点.每个生产者都是短暂的,但在退出之前必须阻止,直到它放入队列的所有消息都被消费者处理.消费者和队列是长寿的.

我所拥有的一些想法是使用单个分区队列,其中每个分区都分配给生产者,或者为每个生产者设置专用队列,并在生产者队列之上构建一种复合队列,供消费者使用.

这似乎是http服务器的常见模式,它有许多http线程,它们就像队列的生产者一样,以及固定数量的工作线程,它们就像队列的消费者一样.然后,在将http响应返回到http客户端之前,http威胁将阻塞,直到它排队的工作完全由消费者处理.

解决方法:

Each producer is short-lived but before exiting has to block until all the messages it put on the queue have been processed by the consumers. Consumer and the queue are long-lived.

Stream.parallelStream()执行此操作.这是一种常见的模式,可以通过几种方式解决,例如ExecutorService.submit(task)Future.get().

build a sort of composite queue on top of producer queues

我会尽量让它变得简单.

最有效的方法取决于您的任务的工作量.例如是CPU还是IO绑定.

pull 1000 messages off the queue, process messages, notify producers of the messages processed successfully;

List<Message> toProcess = someSourceOfMessages(1000);
toProcess.parallelStream().forEach(m -> process(m));
// do something after all tasks are complete.

标签:java,concurrency,producer-consumer
来源: https://codeday.me/bug/20190701/1346212.html