我需要生成N个消费者线程,同时处理相同的InputStream,例如-某种方式进行转换、计算校验和或数字签名等。这些消费者之间互不依赖,并且它们都使用第三方库,该库接受InputStream作为数据源。
因此,我可以创建一个InputStream的某些实现,其中会:
1. 从“父”流中读取数据块 2. 解除消费者的阻塞状态 3. 等待每个消费者读取整个数据块 4. 读取下一个块
虽然看起来很简单,但可能会引起各种问题,比如当某个消费者死亡时造成死锁,需要实现所有的InputStream方法,使用屏障/门闩控制消费者自身的分叉/加入等操作。
我的朋友告诉我这只需半小时就能完成,真是让我愉快的夜晚。
我希望使用足够成熟的解决方案(搜索没有结果,因此我的google-fu不够好?),或者不要麻烦,将整个“源”流复制到临时文件中,并将其用作数据源。后一种解决方案似乎更可靠,但可能导致创建大容量文件(例如在处理流媒体音频时)。
因此,我可以创建一个InputStream的某些实现,其中会:
1. 从“父”流中读取数据块 2. 解除消费者的阻塞状态 3. 等待每个消费者读取整个数据块 4. 读取下一个块
虽然看起来很简单,但可能会引起各种问题,比如当某个消费者死亡时造成死锁,需要实现所有的InputStream方法,使用屏障/门闩控制消费者自身的分叉/加入等操作。
我的朋友告诉我这只需半小时就能完成,真是让我愉快的夜晚。
我希望使用足够成熟的解决方案(搜索没有结果,因此我的google-fu不够好?),或者不要麻烦,将整个“源”流复制到临时文件中,并将其用作数据源。后一种解决方案似乎更可靠,但可能导致创建大容量文件(例如在处理流媒体音频时)。