Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android线程模式是一对一还是多对一?_Java_Android_Linux_Multithreading - Fatal编程技术网

Java Android线程模式是一对一还是多对一?

Java Android线程模式是一对一还是多对一?,java,android,linux,multithreading,Java,Android,Linux,Multithreading,我对Android的线程模型感到困惑。我被卡住了 Android是实现一对一,还是多对多 从Stackoverflow/google/Books中,我了解到Android使用了Linux pthread的一个修改版本。我认为这意味着Android实现了一对一线程模型(即,每个内核线程一个用户线程) 然而,如果我在Android设备上看到进程/线程使用ps-t,那么在一个应用程序中有很多线程。例如,2个kworkers和14个其他线程(例如Binder、mali、JDWP、GCDaemon等)。从

我对Android的线程模型感到困惑。我被卡住了

Android是实现一对一,还是多对多

从Stackoverflow/google/Books中,我了解到Android使用了Linux pthread的一个修改版本。我认为这意味着Android实现了一对一线程模型(即,每个内核线程一个用户线程)

然而,如果我在Android设备上看到进程/线程使用ps-t,那么在一个应用程序中有很多线程。例如,2个kworkers和14个其他线程(例如Binder、mali、JDWP、GCDaemon等)。从这个事实来看,我认为Android实现了多对多线程模型(即,从M个用户线程到N个内核线程)

@我了解到kworker是内核工作线程。认为kworker是应用程序的内核线程是正确的吗?

现在几乎没有什么使用多对一模型。在旧的糟糕日子,操作系统并不都支持多线程,它们很有用。但是在任何现代系统上进行多对一操作都有很大的好处n操作系统,尤其不是Linux。从理论的角度了解调度是很有趣的,或者从实现的角度了解调度是如何工作的,而不必弄脏内核。但这不是任何人都可以使用的东西


真正的好处是什么?拥有一个空闲的内核线程除了少量内存之外没有任何负面影响。那么为什么不使用内核线程呢?

是的。你是对的。但我的问题是,Android是实现一对一还是多对多…而不是多对一。^^;相同的答案。在内核线程上进行多路复用的好处是0。Al所以,ps只能列出内核级线程。哦,你的意思是Android实现了一对一模型?而且,我不知道ps只列出内核级线程。谢谢。:)ps查询内核中关于线程的信息。在多对1或多对多模型中,内核不知道一个内核线程正在用于多个伪线程。这对于操作系统和任何其他应用程序来说都是完全不透明的。