Существует ForkJoinPool(int)
конструктор, который позволяет намекать на «количество параллельности». Я понимаю, что на практике это контролирует количество потоков, которые будут использовать пул.
Могу ли я получить это право? Служба является Singleton, поэтому для моего приложения есть только один экземпляр. Делает ли pool = new ForkJoinPool()
экземпляр только один раз?
Я не специалист по grails :-). Все, что я могу сказать, заключается в том, что каждый раз, когда вы создаете экземпляр класса Java ForkJoinPool
, вы создаете новый пул.
Когда я использую pool = new ForkJoinPool(4)
и я называю taskService. executeAsync(...)
5 раз из моего приложения. Что происходит в этом случае? Будут ли выполняться 5 задач из 4 потоков или будет выполнена 4 задача, и последняя задача будет заблокирована?
Это зависит от того, что делают задачи. Основная идея пула fork/join заключается в том, что когда работник достигает точки, в которой он блокирует поток, он переключается на другую задачу. Он только блокирует поток, если нет работы, которая может быть выполнена.
Итак, в вашем примере должны начаться первые 4 задачи и продолжать работать до тех пор, пока один из блоков задач не будет выполнен. Если/когда это произойдет, начнется пятая задача.
Правильно ли это? Служба является Singelton, поэтому для моего приложения есть только один экземпляр. Будет ли пул = новый ForkJoinPool() будет только один экземпляр? – confile
Когда я использую pool = new ForkJoinPool (4), и я вызываю taskService. executeAsync (...) 5 раз из моего приложения. Что происходит в этом случае? Будут ли выполняться 5 задач из 4 потоков или будет выполнена 4 задача, и последняя задача будет заблокирована? – confile
По умолчанию Служба Grails - это Singelton: http://grails.org/doc/latest/guide/services.html – confile