内核级线程的阻塞

本文探讨了内核级线程在执行时应避免设备IO操作和系统调用如Sleep(),以防止不必要的线程切换导致效率下降。系统调用是用户程序与操作系统内核交互的接口,主要在内核态执行,而库函数则运行在用户态。理解这两者的区别对于优化CPU密集型线程的性能至关重要。

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

内核级线程被操作系统内核创建并管理。当这样的线程内部发送了一次 “用户态到核心态” 或者 “核心态到用户态” 的调用,这样的调用按照操作系统的书面用语,我们叫它“系统调用”。 如果在内核级线程中发生了系统调用,则此线程就会进入阻塞状态。变成暂时不可运行的状态,并且把执行权交还给内核,让内核可以调度其他线程。所以,像游戏逻辑服务器的主逻辑线程(CPU密集型线程)就不应该出现诸如:


设备IO操作 或者 进程间通信等这样的系统调用。否则会发生此线程不必要的运行中断。造成逻辑运行效率低下。

所以,在CPU密集型线程中,比如游戏逻辑服务器的主逻辑线程中,千万不要出现设备IO操作 或者 Sleep()这样的系统调用。否则CPU分配的执行时间片段还没被用完就造成一次线程切换是得补偿失的。


下面是系统调用的标准概念:

计算机中,系统调用英语system call),又称为系统呼叫,指运行在使用者空间程序操作系统内核请求需要更高权限运行的服务。 系统调用提供了用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。


用户空间(用户态)和内核空间(内核态)

操作系统的进程空间可分为用户空间内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间


库函数

系统调用和普通库函数调用非常相似,只是系统调用由操作系统内核提供,运行于内核核心态,而普通的库函数调用由函数库或用户自己提供,运行于用户态。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值