2016-06-21 2 views
1

В Android, Executors.newFixedThreadPool(size) будет рассмотрен процессор ядра, или я должен сделать это. И стоит ли это?Is Executors.newFixedThreadPool (размер) будет рассматривать ядра процессора, или я должен это делать. И стоит ли это?

Если я хочу, чтобы загрузить 50 снимков в один, я мог бы возникнуть соблазн создать пул фиксированного нити 50 нитей, но:

  • переключение контекста
  • количество доступных процессоров

могут быть факторами, которые могут сделать это еще медленнее, чем, возможно, исполнителем, использующим 2-3 потока, не так ли?

Так что, newFixedThreadPool будет рассматривать ядра ЦП (и должен ли он), или я должен это делать.

ответ

1

В Android есть Executors.newFixedThreadPool (размер) будет рассматривать ядро ​​процессора

No. Можно указать количество потоков. Android не собирается каким-то образом масштабировать это количество потоков на основе ядер процессора, которые имеют устройство, не говоря уже о количестве ядер процессора, которые в настоящее время активны.

я должен сделать это

Возможно.

И стоит ли?

Возможно. В вашем случае вы сильно связаны с I/O, поэтому наличие нескольких потоков - хорошая идея. Однако 50, вероятно, слишком много (ваше цитированное переключение контекста, плюс просто место кучи для 50 стеков). Типичным алгоритмом калибровки является (2 * число ядер) + 1.

Смежные вопросы