假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它在具有多核CPU的移动设备上运行(现在是典型的),我是否可以期望在可能的情况下自动将线程分配给不同的内核?
我知道底层操作系统内核(Android linux内核)决定调度。我的问题是我是否需要任何其他来启用多核使用,还是自动且透明?
答案 0 :(得分: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.