首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核线程和用户线程之间有什么区别?

内核线程和用户线程之间有什么区别?
EN

Stack Overflow用户
提问于 2011-02-13 16:00:58
回答 4查看 23.7K关注 0票数 9

内核线程和用户线程之间有什么区别?内核线程是在内核模式下调度和执行的吗?用于创建内核线程的技术是什么?

是在用户模式下调度、执行用户线程吗?内核不参与执行/调度用户线程吗?当执行用户线程发生中断时,由谁来处理?

每当创建线程时,都会为每个线程创建一个TCB。现在,在用户级线程的情况下,这个TCB是在用户地址空间中创建的吗?

在处理上下文切换的两个用户级线程之间切换的情况下?

有一个多线程模型的概念:

  1. 多对一
  2. 一对一
  3. 对很多人来说。

这些模型是什么?这些模型是如何实际使用的?

几乎没有读过关于这个话题的文章,但仍然很困惑。

想要澄清这个概念..。

谢谢你,塔齐姆

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-14 07:41:27

内核线程和用户线程之间有什么区别?

内核线程是有特权的,可以访问用户模式线程不可访问的东西.看看维基百科上的"环(计算机安全)“。在Windows上,用户模式对应于环路3,而内核模式对应于环0。

用于创建内核线程的技术是什么?

这非常依赖于操作系统。

现在,在用户级线程的情况下,这个TCB是在用户地址空间中创建的吗?

TCB记录关于内核在运行该线程时使用的线程的信息,对吗?因此,如果它是在用户空间中分配的,用户模式线程可能会修改或破坏它,这似乎不是一个好主意。那么,您不认为它是在内核空间中创建的吗?

这些模型是什么?这些模型是如何实际使用的?

维基百科似乎对此非常清楚。

票数 4
EN

Stack Overflow用户

发布于 2011-02-13 16:42:25

维基百科对大多数问题都有答案,如果不是全部的话。

科学)

纤维

票数 6
EN

Stack Overflow用户

发布于 2011-08-09 14:56:26

内核线程是指内核负责调度的线程。这意味着,除其他外,内核能够同时在不同的cpus/核心上调度每个线程。

如何使用它们与编程语言和线程API有很大的不同,但是作为一个简单的例子,

代码语言:javascript
复制
void task_a();
void task_b();
int main() {
    new_thread(task_a);
    new_thread(task_b);
    // possibly do something else in the main thread
    // wait for the threads to complete their work
}

在我熟悉的每个实现中,内核可能随时暂停它们。(“先发制人”)

用户线程,或“用户计划线程”,使程序本身负责在它们之间进行切换。做这件事有很多种方法,相应地,它们也有各种各样的名字。

一方面,您有“绿色线程”;基本上是尝试做与内核线程相同的事情。因此,您保留了使用实际线程进行编程的所有复杂情况。

在另一端,你有“纤维”,它需要在任何其他纤维运行之前屈服。这意味着

  • 纤维是按顺序运行的。没有比这更好的业绩了。
  • 纤维之间的相互作用是非常明确的。其他代码只在所产生的确切点运行。在处理变量时,其他代码不会更改它们。
  • 程序员在多线程中遇到的大多数低层次的复杂性,比如缓存一致性(看看这个站点上的MT问题,大多数人都不明白),并不是一个因素。

作为我能想到的最简单的纤维例子:

代码语言:javascript
复制
while(tasks_not_done) {
    do_part_of_a();
    do_part_of_b();
}

如果每个人都做一些工作,则在完成该部分时返回。请注意,这些操作是在相同的“硬件线程”中依次完成的,这意味着您不会从并行处理中获得性能提高。另一方面,它们之间的交互是非常明确的,所以您没有种族条件。每个功能的实际工作可能会有所不同。它们也可以是来自某些向量/数组的“用户线程对象”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4985182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档