面经——线程切换开销、弱引用智能指针weak_ptr

本文详细探讨了线程上下文切换的开销,包括CPU寄存器保存、系统调度器执行等直接和间接消耗,并介绍了减少上下文切换的四种方法:无锁并发编程、锁分离技术、CAS算法和最小化线程使用。此外,文章还讲解了C++中弱引用智能指针`weak_ptr`的用法,解释了其避免循环引用和内存泄漏的作用。

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

这段时间一直在忙着秋招,一边面试,一边整理总结,在面试的过程中也会发现很多问题,自己学习的时候并没有深究,导致“知其然而不知其所以然”,当面试被问到的时候,感到很可惜。其实想想也不必可惜,面试就是一个查漏补缺的过程,在这个过程中发现自己的一些遗漏之处,进一步查阅资料、深入学习,对自己也是很有帮助的。

现在对自己遇到的以及和周围的小伙伴交流的他们遇到的其中一些问题,整理下面经,必要时留下有参考意义的前辈的文章,以便后续查看。

一、线程的上下文切换及其开销

在一次面试时,被问到线程切换的开销指的是什么?听到这个问题的时候有点懵懵的,最后也没答出来个所以然,今天就对这个问题做一些整理。

多线程中两个必要的开销:线程的创建、上下文切换

线程的上下文切换概念:

多任务系统往往需要同时执行多道作业,而作业数往往都大于机器的CPU数,然而一个单核CPU同时只能执行一项任务,操作系统的设计者巧妙地利用了时间片轮转的方式。

1)时间片是CPU分配给各个线程的时间,时间片一般是几十毫秒。

2)CPU通过给每个线程分配CPU时间片,并且不停地切换线程来实现多线程。因为时间片非常短,所以感觉多个线程是在同时执行。

在当前任务执行的过程中,当操作系统分配的时间片用完后,会切换到下一个任务(即执行另外一个线程)。在切换之前,上一个任务的状态会被保存下来,下次切换回这个任务时,可以再加载这个任务的状态,任务从保存到再加载的过程就是一次上下文切换。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值