美文网首页
主从reactor多线程模型(批量操作的项目实战)

主从reactor多线程模型(批量操作的项目实战)

作者: 小胖学编程 | 来源:发表于2022-03-21 21:33 被阅读0次

    业务需求中如何基于reactor模型来进行设计?

    1. 模型图:

    主从reactor多线程.png

    Reactor线程的三种模型(一文解析)

    2. 需求实战

    日常需求中,经常有批量创建类的相关需求。解决这种需求一般采用线程池或者MQ的做法。这里以线程池举例,来说下如何和Reactor模型建立关系。

    前端一次上传提交任务,对于后端来说,这个任务应该是原子性的。若只是使用一个线程池的话,会存在接收m个子任务,拒绝n个子任务的场景。

    所以需要一个线程池(Reactor子线程)去接受任务,并将接受的任务扁平化成m+n个子任务,交由另一个work线程池去处理子任务。

    线程池的拒绝策略:

        /**
         * 接收和分发任务,当阻塞队列慢了之后,应该拒绝任务并抛出异常。
         */
        private ExecutorService subReactorPool =
                new ThreadPoolExecutor(3, 4, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(200));
    
        /**
         * 工作线程池,当阻塞队列满了之后,应该阻塞subReactorPool的线程
         */
        private ExecutorService workPool =
                new ThreadPoolExecutor(10, 20, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(600), (r, executor) -> {
                    try {
                        executor.getQueue().put(r);   //自定义线程池拒绝策略
                    } catch (InterruptedException e) {
                        log.info("异常了", e);
                    }
                });
    
    设计图.png

    代码实现起来并不复杂,但是思想却是和Reactor模型有一些共同之处,且均是为实现异步非阻塞。

    3. 相关推荐

    Reactor线程的三种模型(一文解析)

    ThreadPoolExecutor线程池

    相关文章

      网友评论

          本文标题:主从reactor多线程模型(批量操作的项目实战)

          本文链接:https://www.haomeiwen.com/subject/gwotjrtx.html