当前位置: 首页 > 面试题库 >

自动利用多个CPU内核的线程?

姬锐
2023-03-14
问题内容

假设我的应用程序运行2个线程(例如渲染线程和游戏更新线程)。如果它运行在具有多核CPU的移动设备上(当今通常是这样),我是否可以期望在可能的情况下自动将线程分配给不同的内核?

我知道底层的OS内核(Android linux内核)决定调度。我的问题是我是否需要做 任何其他事情 才能启用多核功能,还是自动而透明的?


问题答案:

您需要做的是允许两个线程尽可能独立地运行。如果您有两个始终在等待的线程,则它们可能在同一内核上运行以节省功耗。(因为看起来似乎没有必要使用内核来获得任何东西)

情况如下:第一个线程解码位图,而渲染器将前一个位图的纹理上载到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.


 类似资料:
  • 问题内容: 有人可以提供解释,说明当JVM仅是Linux上的单个进程时,Java多线程程序(例如Tomcat servlet容器)如何能够使用CPU的所有内核?有没有很好的深入文章详细介绍了该主题? 编辑#1 :我不是在寻找有关如何在Java中实现多线程程序的建议。我正在寻找有关JVM如何在Linux / Windows上内部管理以使用多个内核而仍是OS上的单个进程的解释。 编辑#2 :我设法找到

  • 最近,我偶然发现了http://dask.pydata.org/en/latest/,因为我有一些pandas代码,它只运行在一个核心上,我想知道如何利用我的其他CPU核心。dask是否可以很好地使用所有(本地)CPU内核?如果是,它与熊猫的相容性如何? 我可以用多个CPU来处理熊猫吗?到目前为止,我读到关于发布GIL的消息,但这一切似乎相当复杂。

  • 基于每个JVM的CPU核数创建线程与在多个JVM上运行的线程在CPU核数上创建线程数,条件是所有JVM运行在共享同一CPU的一个物理系统上有何不同?换句话说,一个并行运行8个线程的多线程Java程序vs在共享同一CPU的8个不同JVM上运行的同一多线程程序? 下面我给出了一些我发现的用线程实现并行处理的方法,但是我不能理解它们之间的本质区别? 方法一:线程周期性地查询数据库更改,并行地启动(长时间

  • 问题内容: 在Linux中,假设线程的pid为[pid],则从目录/ proc / [pid]中我们可以获得许多有用的信息。例如,这些proc文件/ proc / [pid] / status,/ proc / [pid] / stat和/ proc / [pid] / schedstat都是有用的。但是,如何获取线程正在运行的CPU核心号?如果线程处于睡眠状态,我如何才能知道线程在再次调度后将在

  • 问题内容: 我想用Java解决带有多个线程的数学问题。我的数学问题可以分为多个工作单元,我想通过几个线程来解决。 我不希望有固定数量的线程在工作,而是与CPU核心数量匹配的线程数量。我的问题是,为此我在互联网上找不到简单的教程。我发现的只是带有固定线程的示例。 如何才能做到这一点?你能提供例子吗? 问题答案: 你可以通过使用静态运行时方法,确定提供给Java虚拟机的进程数availableProc

  • 问题内容: 我正在编写一个使用大量CPU的Java程序,因为它的工作性质。但是,许多程序可以并行运行,并且我使程序成为多线程的。当我运行它时,似乎只使用一个CPU直到需要更多的CPU,然后再使用另一个CPU- 我可以用Java强制其他操作在不同的内核/ CPU上运行吗? 问题答案: 当我运行它时,它似乎只使用一个CPU直到需要更多的CPU,然后再使用另一个CPU-我可以用Java强制其他操作以在不