1
我可以在Android应用程序中同时运行多少个Java线程?我认为这将是一个架构依赖的东西,所以有没有一种方法来确定相同的?Android多线程
我可以在Android应用程序中同时运行多少个Java线程?我认为这将是一个架构依赖的东西,所以有没有一种方法来确定相同的?Android多线程
我可以在Android应用程序中同时运行多少个Java线程?
这取决于你的“运行”和“同时”的定义。
您可以根据需要启动尽可能多的线程,主要受限于内存限制。
同时执行多少个线程取决于设备上活动核心的数量。
我认为这将是一个体系结构相关的事情
架构之外,也要看对什么是所有的事情,因为Android设备断电内核以节省电池电量,只要有可能。另外,根据线程在做什么(例如,阻塞I/O),拥有比内核更多的线程是合理的。
一个典型的多核线程池大小调整算法是使用2n + 1个线程,其中n是核心数。 AsyncTask
uses this approach,例如:
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
这里,线程池将增长到MAXIMUM_POOL_SIZE
,这两次核(availableProcessors()
)加一的数量。
所以,如果我有一个4核心的CPU。然后在任何特定的实例中,最多4个线程可以实际执行代码。尽管其他线程可能存在,但它们必须处于睡眠/等待状态,直到调度程序切换4个正在执行的线程之一。我的理解是否正确? –
@DeepankarArya:正确,尽管在任何给定的点上,这些内核中的一个或多个可能会关闭,因此执行线程的数量可能少于*物理*内核数量。 – CommonsWare
非常感谢! –