java内核线程和用户线程,多线程-用户级线程和内核支持的线程之间的区别?

在进行比较之前,让我们首先了解什么是线程。 线程是独立进程域内的轻量级进程。 之所以需要它们,是因为过程繁重,消耗大量资源,更重要的是,

两个单独的进程不能共享内存空间。

假设您打开一个文本编辑器。 它是在内存中执行的具有独立可寻址位置的独立进程。 在此过程中,您将需要许多资源,例如插入图形,拼写检查等。为每种功能创建单独的过程并在内存中独立维护它们是不可行的。 为了避免这种情况,

可以在一个进程中创建多个线程,这可以   共享一个进程中独立存在的公用内存空间。

现在,一次回到您的问题。

我不太确定用户级线程和内核级线程之间的区别。

线程根据其执行域大致分为用户级线程和内核级线程。 在某些情况下,一个或多个用户线程映射到一个或多个内核线程。

-用户级线程

用户级线程通常位于应用程序级,在此应用程序创建这些线程以维持其在主内存中的执行。 除非需要,否则这些线程与内核线程隔离工作。

因为它们不必引用许多寄存器,并且上下文切换比内核级线程快得多,所以它们更易于创建。

用户级别的线程通常会导致应用程序级别的更改,而内核级别的线程将继续以自己的速度执行。

-内核级线程

这些线程大部分独立于正在进行的进程,并由操作系统执行。

操作系统需要这些线程来执行诸如内存管理,进程管理等任务。

由于这些线程维护,执行和报告操作系统所需的进程; 内核级线程的创建和管理成本更高,并且这些线程的上下文切换很慢。

大多数内核级线程不能被用户级线程抢占。

MS DOS written for Intel 8088 didn't have dual mode of operation. Thus, a user level process had the ability to corrupt the entire operating system.

-映射到内核线程上的用户级线程

这也许是最有趣的部分。 许多用户级线程映射到内核级线程,内核级线程又与内核进行通信。

一些重要的映射是:

一对一

当一个用户级线程仅映射到一个内核线程时。

优点:每个用户线程都映射到一个内核线程。 即使用户线程之一发出阻止的系统调用,其他进程也不会受到影响。

缺点:每个用户线程都需要一个内核线程进行交互,并且内核线程的创建和管理成本很高。

多对一

当许多用户线程映射到一个内核线程时。

优点:因为可以将相似的用户线程映射到一个内核线程,所以不需要多个内核线程。

缺点:即使一个用户线程发出了阻塞的系统调用,映射到该内核线程的所有其他用户线程也会被阻塞。

另外,由于内核一次仅处理一个内核线程,因此无法实现良好的并发水平。

多对多

当许多用户线程映射到等于或更少数量的内核线程时。 程序员决定将多少个用户线程映射到多少个内核线程。 一些用户线程可能仅映射到一个内核线程。

优点:实现了高水平的并发。 程序员可以确定一些潜在危险的线程,这些线程可能发出阻塞的系统调用,并将它们与一对一映射放置在一起。

缺点:如果不谨慎决定内核线程的数量,可能会减慢系统速度。

您问题的另一部分:

内核支持的线程可以访问内核以进行系统调用   以及用户级线程无法使用的其他用途。

那么,用户级线程仅仅是程序员创建的线程吗?   然后利用内核支持的线程来执行   由于其状态而无法正常执行?

部分正确。 由于内核线程负责执行OS的进程,因此几乎所有内核线程都可以访问系统调用和其他关键中断。 用户线程将无法访问其中一些关键功能。 例如 文本编辑器永远无法拍摄能够更改进程物理地址的线程。 但是,如果需要,用户线程可以映射到内核线程,并发出一些作为独立实体无法执行的系统调用。 然后,内核线程将该系统调用映射到内核,并在认为合适的情况下执行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值