Linux下从信号量看线程调度时间

本文介绍了如何使用Linux下的信号量semaphore来测试线程间切换的时间,通过创建两个线程,一个发送信号量,另一个等待信号量并计算时间差,利用TSC计数器获取高精度时间。实验结果展示了线程调度的时间在us数量级。

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


前几天写了一篇文章关于Linux下进程调度时间的,本意是想测试下实时性能的,包括中断响应时间等等,这个可能需要借助于硬件发出终端来测试,

那片文章是讲的是通过发送信号给另一个进程,然后测量发送信号到进入信号处理程序之间的时间

信号只是针对进程来说的,今天讲的主要是通过信号量semaphore来测试一下线程间切换的时间

首先看下基础知识:

1.Linux下的进程和线程

 linux下线程分为用户级线程和内核级线程,在内核来看,线程和进程是一样的,本质上没有区别

 内核提供的是创建进程的接口do_fork()。内核提供了两个系统调用clone()和fork(),最终都用不同的参数调用do_fork()核内API。当然,要想实现线程,没有核心对多进程(其实是轻量级进程)共享数据段的支持是不行的,因此,do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、 CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当使用fork系统调用时,内核调用do_fork()不使用任何共享属性,进程拥有独立的运行环境,而使用 pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone(),而这些参数又全部传给核内的do_fork(),从而创建的“进程”拥有共享的运行环境,只有栈是独立的,由__clone()传入。

具体可以参考<<深入理解Linux内核>>第三版,讲的非常详细


2. Linux下的信号量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值