线程的分类

本文介绍了线程的两种主要类型:用户级线程和内核级线程。用户级线程由应用程序管理,切换速度快,但遇到系统调用可能导致整个进程阻塞;内核级线程由内核管理,支持多处理器并行,但上下文切换开销大。混合方法试图结合两者优点,允许应用程序自定义线程数以优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程分类:

用户级线程和内核级线程(轻量级进程)

用户级线程:

在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。

这里写图片描述

使用用户级线程而非内核级线程有很多优点:
(1)由于所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核态特权,因此,进程不需要为了线程管理而切换到内核态,这节省了两次状态转换(从用户态到内核态,从内核态返回到用户态)的开销。
(2)调度可以是应用程序相关的。一个应用程序可能更适合简单的轮转调度算法,二零一个应用程序可能更适合基于优先级的调度算法。可以做到为应用程序量身定做调度算法而不影响底层的操作系统调度程序。
(3)用户级线程可以在任何操作系统中运行,不需要对底层内核进行修改以支持用户级线程。线程库是一组供所有应用程序共享的应用程序共享的应用程序级别的函数。

用户级线程相对于内核级线程的缺点:
(1)在典型的操作系统中,许多系统调用会引起阻塞。因此,当用户级线程执行一个系统调用时,不进这个线程会被阻塞,进程中所有线程都会被阻塞。
(2)在纯粹的用户级线程中,一个多线程应用程序不能利用多处理技术。内核一次只把一个进程分配给一个处理器,因此一个进程中只有一个线程可以执行。

解决办法:
(1)把应用程序写成一个多进程应用程序而非多线程应用程序,但这种方法消除了线程的主要优点:每次切换都变成了进程间的切换,而不是线程间的切换,导致开销过大。
(2)使用jacketing技术,jacketing目标是把一个产生阻塞的系统调用转换成一个非阻塞的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值