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

标签 java android multithreading

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

我知道底层操作系统内核(Android linux 内核)决定调度。我的问题是我是否需要做任何额外的来启用多核使用,还是它是自动和透明的?

最佳答案

你需要做的是尽可能让两个线程独立运行。如果您有两个始终相互等待的线程,它们可能会在同一个内核上运行以节省电量。 (因为使用内核似乎没有任何好处)

the case is the following: first thread decodes a bitmap, while renderer uploads the texture of the previous bitmap to GPU. The first thread goes to sleep if nothing to do; then wakes up if a bitmap needs to be decoded again.

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

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.

关于java - 自动利用多个 CPU 内核的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259610/

相关文章:

android - 如何从安卓模拟器连接到本地服务器?

android - 如何使服务即使在 sleep 模式下也能运行?

python - 我的脚本需要同时运行两个循环来读取来自两个不同来源的 IO 数据。我的线程正确吗?

c++ - Map 与 Unordered_map——多线程

Java扫描仪: "0" is not a double

java - 使用 NIO 将 Tomcat 服务器作为 Windows 服务运行

android - react native ffmpeg : Native module cannot be null (ios) and null is not an object (evaluating 'RNFFmpegModule.enableLogEvents' ) (android)

c# - 来自多个客户端的多个 ASP.NET 请求如何共享信息?

java - @Version 在 Spring mongo 中没有增加

java - Spring Controller Advice异常处理程序总是返回404