gpt4 book ai didi

java - 如何确保我的线程/进程在不同的内核上运行

转载 作者:行者123 更新时间:2023-11-29 08:00:09 25 4
gpt4 key购买 nike

当我在多核设备(如 S3)和单核 Android 设备上运行我的多线程 Android 应用程序时,我正在尝试衡量我的代码的性能改进。为了衡量性能,我按顺序运行任务而不是并行运行任务。我已经实现了普通的 Java 线程,这似乎没有什么不同。因此,我尝试了 AsynchTask,但我只获得了一点点性能提升。

你能告诉我如何编写代码来确保我的每个任务/线程都在不同的内核上运行,而不是在一个内核上运行吗?如果这不可能,我如何才能最大限度地利用我的应用程序的多核?

这是执行任务的 Activity 的 onCreate 方法的代码。

protected void onCreate(Bundle savedInstanceState)  {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_executor);

multiplicationTask t1 = new multiplicationTask();
t1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

multiplicationTask t2 = new multiplicationTask();
t2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

multiplicationTask t3 = new multiplicationTask();
t3.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

multiplicationTask t4 = new multiplicationTask();
t4.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

}

这是从 onCreate 方法运行的 AsynchTask

class multiplicationTask extends AsyncTask<Integer, Integer, String> {

protected void onPreExecute()
{
Log.v("PrintLN", "Executing Task");
}

@Override
protected String doInBackground(Integer... params) {
//Do lots of floating point operations that are independent of anything whatsoever
}


protected void onPostExecute(String result) {
Log.v("PrintLN", "Done Task: " + resulting_time);
}

}

最佳答案

Android 对此有限制。你不能手动让你的线程在某个核心上运行。最好的方法是您可以使用 ThreadPoolExecutor 来控制线程数。这样ThreadPoolExecutor会根据内核的使用情况自动分离线程在内核中运行

关于java - 如何确保我的线程/进程在不同的内核上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14918624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com