Android线程模型是一对一还是多对一?

时间:2016-08-22 00:59:26

标签: java android linux multithreading

我对Android的线程模型感到困惑。我被困了...... :(

  

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

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

但是,如果我在Android设备上看到使用 ps -t 的进程/线程,那么单个应用程序中就会有很多线程。例如,2个工作者和14个其他线程(例如Binder,mali,JDWP,GCDaemon等)。从这个事实来看,我认为Android实现了多对多线程模型。 (即,M个用户线程到N个内核线程)
@我已经知道kworker是内核工作者线程。认为kworker是应用程序的内核线程是对的吗?

1 个答案:

答案 0 :(得分:1)

这些天几乎没有任何东西使用多对一模型。当操作系统不支持多线程时,它们在过去的糟糕时期非常有用。但是,在任何现代操作系统上做多对一都会带来很多好处,特别是Linux。从理论的角度来理解它是有趣的,或者实现理解调度如何工作而不必破坏内核。但它不是任何人使用的东西。

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