【问题标题】:Is Android thread model one-to-one or many-to-one?Android线程模型是一对一还是多对一?
【发布时间】:2016-08-22 00:59:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android linux multithreading


    【解决方案1】:

    如今几乎没有使用多对一模型。当操作系统并不都支持多线程时,它们在过去的糟糕日子里很有用。但是在任何现代操作系统上做多对一几乎是零收益,尤其是在 Linux 上。从理论的角度学习,或者实施以了解调度是如何工作的,而不必与内核混在一起,这很有趣。但它不是任何人使用的东西。

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

    【讨论】:

    • 是的..你是对的。但我的问题是,Android 是实现一对一还是多对多……而不是多对一。 ^^;
    • 同样的答案。在内核线程上进行多路复用的优势为 0。另外,ps 只能列出内核级线程。
    • 哦,你的意思是Android实现了一对一的模型?而且,我不知道 ps 只列出内核级线程。谢谢。 :)
    • ps 查询内核的线程信息。在多对一或多对多模型中,内核不知道内核线程正在用于多个伪线程。这只是对操作系统和任何其他应用程序完全不透明的东西。
    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多