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



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

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

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

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

现在几乎没有什么东西使用多对一模型。它们在过去的糟糕日子里很有用,当时操作系统并不都支持多线程。但是在任何现代操作系统上做多对一几乎没有任何好处,尤其是Linux。从理论的角度来学习是很有趣的,或者从实现的角度来理解调度是如何工作的,而不必与内核打交道。但并不是所有人都使用它。

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

最新更新