2013-06-23 41 views
1

假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它在具有多核CPU的移动设备上运行(现在是典型的),我是否可以预期在可能的情况下线程会自动分配给不同的内核?线程自动使用多个CPU核心?

我知道底层操作系统内核(Android Linux内核)决定调度。我的问题是我是否需要额外增加以启用多核使用,还是自动透明?

回答

3

你需要做的是让两个线程尽可能独立运行。如果您有两个始终彼此等待的线程,则它们可能运行在相同的核心上以节省功耗。 (因为它可能会出现有由具有核上一无所获使用)

的情况是这样的:第一个线程解码位图,而渲染上传之前的位图GPU的纹理。如果什么都不做,第一个线程会进入睡眠状态;然后在需要再次解码位图时醒来。

我怀疑这是一个很好的例子,其中两个线程不会帮助,因为位图解码应该比“上传”更快这意味着你有两种情况

T1: decoding bit map, 
T2: waiting for a bit map. 

T1: sleeping 
T2: uploading a bit map. 

T1: sleeping 
T2: waiting for a bitmap. 

你能看看有没有情况下两个线程都需要运行(或者很少),这可能是不低于只是在做这个

T1: decodes bitmap. 
    uploads bitmap. 
    waiting for a bitmap. 
+0

系统是否监视我的应用程序的这种行为在某种程度上更快或更慢,并且基于一些启发式决定?如何“永久”是决定(如果你有这样的信息)? BTW的情况如下:第一个线程解码位图,而渲染器将* previous *位图的纹理上传到GPU。如果什么都不做,第一个线程会进入睡眠状态;然后在需要再次解码位图时醒来。 –

+0

但调度程序不能在进程级别工作? – Blackbelt

+0

@ThomasCalc系统不需要监视自己,因为它是做这件事的人。如果您一次只有一个可运行线程,则它可以使用一个内核。 (即使有数百个等待的内核)如果在任何时间长度内有两个可运行线程(因为它们不会彼此等待),它们可以同时运行。 –