详解clone函数

本文探讨了Linux中的clone函数,它在创建线程中的作用。区别于fork,clone通过传递特定参数实现线程创建。文章详细阐述了上下文切换的过程,包括进程切换的开销和时间片轮转的影响。还分析了clone任务的步骤,并提到通过设置线程优先级来减少上下文切换的开销。最后,通过VTune的实验结果展示了不同优先级对上下文切换类型的影响。

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

我们都知道linux中创建新进程是系统调用fork,但实际上fork是clone功能的一部分,clone和fork的主要区别是传递了几个参数。clone隶属于libc,它的意义就是实现线程。


看一下clone函数:

int clone(int (*fn)(void * arg), void *stack, int flags, void * arg);

fn就是即将创建的线程要执行的函数,stack是线程使用的堆栈。


再来看一下clone和pthread_create的区别:linux中的pthread_create最终调用clone。


我们的目的不是为了介绍clone,而是探究clone中的上下文切换问题。

(1)进程切换:把运行的进程的CPU寄存器中的数据取出存放到内核态堆栈中,同时把要载入的进程的数据放入到寄存器中(硬件上下文),还会把所有一切的状态信息进行切换。

(2)时间片轮转的方式使多个任务在同一颗CPU上执行变成了可能,但同时也带来了保存现场和加载现场的直接消耗(上下文切换会带来直接和间接两种因素影响程序性能的消耗。直接消耗包括:CPU寄存器需要保存和加载,系统调度器的代码需要执行,TLB实例需要重新加载,CPU 的pipeline需要刷掉;间接消耗指的是多核的cache之间得共享数据,间接消耗对于程序的影响要看线程工作区操作数据的大小)。

(3)clone任务[1]:

  • Allocate data structures for thread representation
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值