多线程如何提升效率

这篇blog的标题看起来很像是技术类的文章(当我从脑海里浮现出这篇文章的标题时,我意识到自己已经深受最近写的xv6的影响),
但事实上,这篇文章是一篇随想文章,是想写我最近的一些感慨。

计算机中的多线程

我想这其实和计算机的多线程颇有相似之处。对于一个多线程的任务,如果同时有多个线程访问并修改一个变量,那么很可能导致某些操作被覆盖,并没有被写入,从而导致结果并非预期所想。
程序员如何解决这个问题?答案是,引入原子操作的概念。
所谓原子操作,即在这段代码执行操作的时间里,有且仅有这段代码能获取和修改这个变量,其他线程想要获得,只能等到这段代码结束原子操作。
那怎么实现原子操作呢?这就要用到上文提到的锁。对于想要保护唯一访问的变量,用一个锁维护起来。每个线程想要访问该变量时,首先判断该变量的锁是否被夺取,如果没有,则将该锁夺取,同时进行其对应操作;如果已经被夺取,那就不断等待,或者让自身进入睡眠(自旋锁和睡眠锁hhh),直到可以获得锁的时候。

生活中的多线程

我们每个人其实都生活在多线程中。死去的大作业突然开始攻击自己,家里的爸妈想让我看看Excel,爱人和我约会,同学与我聊天,我是生活里每个人(以及每个事物)想要访问并获取的对象。我需要对这些大大小小的事务进行处理。但是就像计算机一样,如果你想着多件事情(比如,一边写xv6的报告,一边想着迟迟未动的数据库课设,还有陪npy,还有学科三),这些事情就会影响到你工作的状态,最严重的情况是,(用当下较为时兴的话来说,)我陷入了内耗,因为我一直处在对各种可能完不成的任务的担忧之中。
所以在面对生活里的多线程时,也需要引入原子操作,引入
所谓原子操作,就是要专注当下,当你在完成这项任务时,你只是在完成这项任务,其他的任务已经提前规划好了,就不必再为其担心。就好像给你上了一把锁,现在你只是关在这个房间里完成这个房间的任务,等下个房间再去完成其他的任务。(灵魂拷问:可以不去房间里吗)
那么怎么确定原子操作的优先级呢?答案是熟记二八法则,首先完成20%最重要的事情,产出最大的价值。

致谢

写这篇blog主要是之前和npy吵架时得到的经验教训,虽然她生气的时候凶凶的,但是我知道她心里是为我好,考虑着我的,因此我很感谢她在我生命里的存在。


9.6更新

散步时亦想到另外一句话。不论是对生活还是对计算机,宏观上表现出来是多线程,但微观上说其实仍然是单线程,只是通过时分的方法解决问题罢了


该图片由Gerd AltmannPixabay上发布


多线程如何提升效率
http://baokker.github.io/2022/08/17/多线程如何提升效率/
作者
Baokker
发布于
2022年8月17日
更新于
2022年9月6日
许可协议