Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 异步资源密集型设计模式_Java_Multithreading_Design Patterns_Asynchronous_Web Crawler - Fatal编程技术网

Java 异步资源密集型设计模式

Java 异步资源密集型设计模式,java,multithreading,design-patterns,asynchronous,web-crawler,Java,Multithreading,Design Patterns,Asynchronous,Web Crawler,我正在用java编写一个网络爬虫,其设计模式如下: 我将任务分为原子子任务: - downloading - content separation - html parsing - pdf parsing - link extraction - etc. 每个子任务都有预定义类型的输入,并且可以有任意数量的不同输出。可用的数据类型包括: - link - binary data - raw html - raw pdf - parsed document - etc. 例如:“下载”任务的输

我正在用java编写一个网络爬虫,其设计模式如下:

我将任务分为原子子任务:

- downloading
- content separation
- html parsing
- pdf parsing
- link extraction
- etc.
每个子任务都有预定义类型的输入,并且可以有任意数量的不同输出。可用的数据类型包括:

- link
- binary data
- raw html
- raw pdf
- parsed document
- etc.
例如:“下载”任务的输入类型为链接,并输出二进制数据,“内容分离”任务的输入类型为二进制数据,并输出“原始html”或“原始pdf”对象

有一个由N个线程组成的工作线程池来执行这些子任务。每当有空闲工作线程(空闲线程)时,就会选择对象数最多的数据类型(例如:数据库中有5个链接、2个二进制数据和6个已解析文档,然后选择“已解析文档”数据类型)。然后,工作进程将创建并异步执行具有选定数据类型的子任务

此设计的目的是使爬虫程序本身的实现尽可能简单(只需要定义数据类型和子任务,包括多线程在内的所有其他操作都由“容器”处理)

简而言之就是这样

我敢肯定,我不是第一个想到这个解决方案的人,但我似乎找不到关于这个话题的任何东西。
这个设计模式有什么名字吗,或者有人可以分享一些关于它的文章吗?如果有一个现有的开源java实现,或者任何人都知道这样的项目,那也很好。

据我所知,您描述了一种基于消息的通信

你描述的设计让我想起了一个热水池,尽管它并不完全相同

编辑

在我看来,您所需要的一切都已经由Java提供了

Java提供,Java提供。在我看来,这应该足够了。不是吗


也许你会读一读这本书。我希望这就足够了。

我将异步排队作为程序的一部分,但它只是更复杂系统的一小部分。我在寻找与我描述的更接近的东西。@Kicsi您能具体说明一下您到底在寻找什么吗?我以为你会在寻找一个工人池的实现?或者你正在寻找一个爬虫的实现?我正在寻找的是一个框架/容器,在这个框架/容器中,我只需要定义子任务和数据类型,一切都按照我描述的那样工作。我不一定要寻找一个实现,任何证明有人在我之前做过这件事的证据都很好(只需要一个搜索的起点:))。实现这个系统并不困难,但是测试它,发现所有可能的错误/缺点,并对其进行微调,总的来说是一个漫长而痛苦的过程,如果可能的话,我希望避免这个过程。