单线程应用程序在Android中会利用多核处理器吗?

36

单线程应用程序是否会在四核手机上使用全部四个核心?

我搜索了很多文章,有些说是,有些说不是。甚至有些文章称Android操作系统不利用这四个核心。

Android是否能够利用四核处理器的全部4个核心?

单线程应用程序是否会利用多核心?


24
比尔·盖茨提出了一个问题,史蒂夫·乔布斯进行了编辑。丹尼斯·里奇先生将会回答这个问题。 - Iftikar Urrhman Khan
我不想重复别人的回答,但我同意这个主题的答案和讨论类似问题。没有有效的理由,操作系统不应该利用所有的核心。希望这可以帮到你,祝你工作愉快。 - Marko Lazić
1
我看不到 Linus Torvald 在附近。 - N-JOY
1
虽然这个问题并不一定相关,但是它有些错误:所有的Android应用程序都必须有多个线程。即使在一个新手开发者没有意识到线程的情况下做了一些事情的微不足道的情况下,仍然会在设置应用程序进程的过程中创建许多线程,并且它们最终会被利用。 - Chris Stratton
2
评估它的简单程序位于http://bigflake.com/MultiCore.java.txt和http://bigflake.com/cpu-spinner.c.txt。有各种情况,其中内核将在单个核心上调度给定应用程序的所有线程,但这些程序表明,如果你足够努力,你可以让所有核心都运行。 - fadden
1
我将MultiCore.java.txt放入一个简单的应用程序中,在systrace下运行,并在http://bigflake.com/systrace/上发布了结果。您可以清楚地看到Nexus 4将工作转移到第三和第四个核心的时间点。您还可以看到系统中除应用程序外还有很多其他活动,因此即使是“单线程”的应用程序也可以从多核设备中受益。 - fadden
2个回答

22
答案是是的
Android基本上是建立在Linux内核之上的,它确实利用了多核技术。就单线程应用而言,需要记住的是,一个线程不能同时在不同的核心上被部分执行。因此,虽然你的单线程可以在不同的时间点由不同的核心执行,但它不能被分成几个部分并同时由不同的核心执行。
话虽如此,请注意,像高通这样的芯片制造商正在开发智能处理器,能够将你的单线程应用程序代码(仅当存在互斥部分时)细分为多个线程,并在不同的核心上运行。这里的基本原则仍然相同 - 为了利用多核,单线程被细分成多个线程。
要充分利用多核芯片,最好创建一个多线程应用程序,最大限度地使用异步线程,以便最大程度地利用最多的核心数。希望这样清楚明白了。 < p > 编辑:

这也意味着 - 不使用多个异步线程(或任何其他并行构造)的应用程序将不会使用超过一个核心。


1
你没有回答这个问题。一个不使用多线程(或任何其他允许并行的结构)的应用程序将不会使用超过一个核心。 - Wes
嗨Wes,我相信我在我的答案的最后一段提出了那个观点。如果只需要改写,我现在已经做到了。谢谢! - Gagan
你错了。单线程工作负载不会利用超过一个核心。网络浏览器属于这一类别,也就是说每个标签页最多只能使用一个核心。答案是否定的。 - Rok Kralj
嗨Rok,网络浏览器每个标签使用单独的进程(不是核心本身)。我在第二段中想要表达的是:如果您的单线程应用程序代码具有互斥部分,则新的智能处理器能够将此原本的单线程代码细分为多个(本地)线程,然后在多个核心上运行它们。如果只需要改写,我现在已经完成了。谢谢!更多关于并行性的信息,请参见:https://developer.qualcomm.com/blog/multi-threading-android-apps-multi-core-processors-part-1-2和https://msdn.microsoft.com/en-us/magazine/cc163340.aspx - Gagan

7
是的。Android 3.0是平台上第一个旨在运行在单核或多核处理器架构上的版本。 即使是单线程应用程序也可以从不同核心的并行处理中受益。 例如,如果您的应用程序使用媒体服务器,则媒体处理和UI渲染应用程序逻辑可以同时在不同的核心上运行。此外,垃圾收集器可以在不同的核心上运行。 假设您正在使用图形。为了呈现相同的内容,您的应用程序可以使用多个核心。您可以在下面的链接中检查相同的内容。 https://youtu.be/vQZFaec9NpA?t=459(图形和性能)

http://android-developers.blogspot.in/2010/07/multithreading-for-performance.html

请查看此PDF文件。向下滚动到第22页幻灯片。可能会有用。

http://elinux.org/images/1/11/Application-Parallelization-Android-KlaasVanGend.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接