linux时间片测试
如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU 当即进行切换
测试条件
单核CPU
示例代码
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/time.h>
void time_print()
{
struct timeval tv;
gettimeofday(&tv,NULL);
printf("microsecond:%ld\n",tv.tv_sec*1000000 + tv.tv_usec); //微秒
}
void *fun(void *arg)
{
printf("I'm thread, Thread ID = %lu\n", pthread_self());
while(1)
{
time_print();
usleep(10);
}
return NULL;
}
void *fun1(void *arg)
{
printf("I'm thread 1, Thread ID = %lu\n", pthread_self());
while(1)
{
sleep(1);
}
return NULL;
}
int main()
{
pthread_t tid;
pthread_t tid1;
pthread_create(&tid, NULL, fun, NULL);
pthread_create(&tid, NULL, fun1, NULL);
void *status;
pthread_join(tid, &status);
return 0;
}
效果
microsecond:1281790443
microsecond:1281790572
microsecond:1281790939
microsecond:1281791501
microsecond:1281791891
microsecond:1281792407
microsecond:1281792877
microsecond:1281793379
microsecond:1281793868
microsecond:1281794393
microsecond:1281794901
microsecond:1281795347
microsecond:1281795866
microsecond:1281796399
microsecond:1281796968
microsecond:1281797427
microsecond:1281797955
microsecond:1281798403
microsecond:1281798513
microsecond:1281798708
microsecond:1281798862
microsecond:1281799380
microsecond:1281799859
microsecond:1281800359
microsecond:1281800835
microsecond:1281801364
microsecond:1281801822
microsecond:1281802345
microsecond:1281802835
microsecond:1281803318
microsecond:1281803832
microsecond:1281804282
microsecond:1281804809
microsecond:1281805349
代码修改
void *fun1(void *arg)
{
printf("I'm thread 1, Thread ID = %lu\n", pthread_self());
while(1)
{
//sleep(1);
}
return NULL;
}
效果
microsecond:2104360508
microsecond:2104360736
microsecond:2104360960
microsecond:2104361436
microsecond:2104361992
microsecond:2104362669
microsecond:2104366038
microsecond:2104366282
microsecond:2104367009
microsecond:2104367406
microsecond:2104367803
microsecond:2104368249
microsecond:2104368569
microsecond:2104369056
microsecond:2104369396
microsecond:2104369848
microsecond:2104370382
microsecond:2104371851
microsecond:2104375930
microsecond:2104376353
microsecond:2104376543
microsecond:2104377816
结论
通过第二个测试,可以看出时间片切换是ms级别的
如有错误,欢迎指正
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!