Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问线程池可以处理高递归的任务吗 #16

Open
YukunJ opened this issue Mar 27, 2023 · 1 comment
Open

请问线程池可以处理高递归的任务吗 #16

YukunJ opened this issue Mar 27, 2023 · 1 comment

Comments

@YukunJ
Copy link

YukunJ commented Mar 27, 2023

假设原来有类似这样一个会产生很高递归栈的函数:

int fib(int n) {
  if (n <= 1) {
    return 1;
  }
  return fib(n-1) + fib(n-2);
}

把它改写用threadpool后,有类似这样的:

int fib(int n) {
  if (n <= 1) {
    return 1;
  }
  int a = pool.submit(fib(n-1));
  int b = pool.submit(fib(n-2));
  return a + b;
}

但是我有一个困惑是, 在计算fib(n-1)和fib(n-2)时 原来的fib(n)还是挂在线程池里的某一个worker身上没法被销毁, 也不能被销毁. 这样的话递归不了几层, 所有的线程worker都卡住了.

当然如果超出了现有的线程数量可以去新开数量, 但是面对高递归任务时, 开出来大几百个线程worker会很快使得系统性能下降.

请问有什么能保存当前的context但是又不卡住一个线程资源的使用方法吗

@CodingHanYa
Copy link
Owner

我觉得让线程从队列尾部而不是头部开始处理任务可能可以解决这个问题。但目前Hipe确实不具备这样的能力。一种简单的替代就是把递归任务放在一个任务里,或者尝试一下以任务组的形式提交,并把这个任务组倒过来塞进去。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants