一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
前面我们花了几节说了Disruptor的一些概念和它的初始化,那么对于它的初始化后我只是简单说了下, 经过一段时间后,决定再往里说说,对于初始化后书接上回,Disruptor构造方法请看高性能并发框架Disruptor,
接着调用handleEventsWithWorkerPool(设置WorkerPool以将事件分发到工作处理程序线程池之一。 每个事件将仅由其中一个工作处理程序处理_。当start()被调用时,Disruptor 会自动启动这个处理器_)里面会调用createWorkerPool,
**第一个参数是Sequence并发序列类,用于跟踪环形缓冲区和事件处理器的进度。支持多项并发操作API**
**第二个参数是处理事件的工作处理程序**
对于该事件处理程序,我们需要它实现WorkHandler接口,并实现它的event方法,我们可以将我们需要做的动作写在里面,我们的项目上做的是写文本的操作 ,在初始化的时候由于我们的是写操作,存在消耗资源严重,所以我们要用阻塞策略BlockingWaitStrategy用于等待屏障的EventProcessor(官方的:当吞吐量和低延迟不如 CPU 资源重要时,可以使用此策略),还有建议生产者用单生产者,省去冲突加锁,好了,这块初始化结束,
我们看下createWorkerPool做了啥 它会创建一个新的 SequenceBarrier(协调屏障) 以供 EventProcessor 使用,以跟踪哪些消息可从给定要跟踪的序列列表的环形缓冲区中读取,然后创建工作池,传入对应的环形缓冲区,SequenceBarrier,异常处理,事件处理程序 这些参数
,放入存储库consumerRepository.add(workerPool, sequenceBarrier);(这块就不大懂了,有时间再琢磨琢磨),添加工作队列,在调用handleEventsWithWorkerPool后再.then();加个垃圾回收器 加快环形队列垃圾回收,这里的垃圾回收是回收自己事件处理器里的数据,后start()被调用返回一个disruptor,外面用Disruptor<事件实现存储数据以在事件的交换或并行协调期间共享(就是你的事件处理器)>,这就是初始化的过程,和线程池的确有相似的地方,