gpt4 book ai didi

java - 限制 Gpars 中的线程数?

转载 作者:行者123 更新时间:2023-11-29 05:38:50 24 4
gpt4 key购买 nike

我使用 GPars对于执行后台任务的并行进程。我使用以下服务启动一个新的后台线程。

  1. 节省堆内存如何限制后台线程数?

  2. 如何定义一个由 n 个线程组成的线程池来处理我的后台任务?

    import jsr166y.ForkJoinPool

    class TaskService {


    private pool = new ForkJoinPool()

    def executeAsync(args, closure = null) {
    if(!closure) {
    closure = args
    args = null
    }

    GParsPool.withExistingPool(pool) {
    closure.callAsync(args)
    }
    }
    }

最佳答案

有一个ForkJoinPool(int)允许您暗示“并行度”的构造函数。我的理解是,在实践中控制池将使用的线程数。


Do I get this right? A Service is a Singleton, so there is only one instance for my app. Does pool = new ForkJoinPool() will only instantiate once?

我不是 grails 专家 :-)。我只能说,每次实例化 Java 类 ForkJoinPool 时,您都在创建一个新池。


When I use pool = new ForkJoinPool(4) and I call taskService. executeAsync(...) 5 times from my app. What happens in this case? Will the 5 tasks be executed from the 4 threads or will 4 task be executed and the last task will be blocked?

这取决于任务的作用。 fork/join pool 的基本思想是,当一个 worker 到达它会阻塞线程的点时,它会切换到另一个任务。如果没有可以完成的工作,它只会阻塞线程。

因此在您的示例中,前 4 个任务应该开始,并继续运行直到其中一个任务阻塞。如果/当发生这种情况时,第 5 个任务将开始。

关于java - 限制 Gpars 中的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com