互斥读写作用

我记得有一次我熬夜写代码。
半夜3 点左右,突然发现连接数据库出现问题。
经核实,确认是并发问题。
读写锁当时还不是我真正理解的东西,但是后来我明白了。
例如,在Java中,ReentrantReadWriteLock是一种常见的读写锁。
假设我们有一项服务。
晚上人少,读书多。
一天中的高峰时段有更多的写入活动。
我将其设置为晚上系统启动时读取锁定。
令人高兴的是,我们现在有十多个读取操作同时运行,并且它们不会相互干扰。
上午9 点,写作开始。
一旦有写操作进来,其他读操作就必须等待。
写操作完成后,另一个读操作也随之执行。
这个地方就像一个图书馆。
晚上人不多,谁都可以从书架上拿一本书。
不过白天人很多,想要借书的人要排队等候。
不是每个人都能挤进书架的。
这就是读写锁定的含义。
等等,还有一件事。
读写锁有两种类型:公平锁和非公平锁。
这有什么影响?公平地说,它是先到先得,但不公平的是,一旦写入操作开始,它就会被锁定,无论它是否在读取队列中。
突然我想到,如果写操作很多,读操作是不是要等待很长时间?这种性能损失需要详细分析。

独占锁(写锁)/ 共享锁(读锁)/ 互斥锁

嘿,我以前一直不懂这些技术术语。
我记得有一次我正在开发一个电子商务网站。
那时我正在使用Java。
我当时对辩论池还是个新手,并且有读写锁,但发生了一些事情。
那是2 01 8 年,我们在杭州,项目组里有一个大佬。
他坚持构建读写锁来提高构建性能。
当时我们希望页面能够在用户浏览商品详情页面时实时显示商品评论信息。
这包括阅读作业。
阅读和阅读可以同时进行。
我们使用共享锁,是读锁,结果还不错。
但问题来了。
用户编辑产品评论时需要撰写评论。
这种情况下读写分离锁就没用了。
当时我们使用关键字sync。
写操作被锁定后,其他读写操作都得等待,效率简直惨不忍睹。
后来,大牛向我讲述了这种特殊的锁和写操作的忽视。
他说,书面作品必须是原子的,不能被分割或碎片化。
现在我想,我们能不能用特殊的锁来解决这个问题呢?
因此,我们切换到排他锁,这样在写操作期间,其他读写操作都停止,直到写操作完成。
这样虽然牺牲了构建部分,但是保证了数据的一致性,对于用户体验来说是一个很大的提升。

让我们谈谈控制台,这是一个陷阱。
记得有一次,我们使用console来检索日志信息,在多线程环境下,发现输出的日志信息很乱。
后来才知道控制台的写操作是兼容其他操作的。
读和写可以同时进行,但是读和写不同,这就产生了问题。

总之,涉足技术就是不断地走进陷阱,然后解决它们。
这些经历都是血泪的教训! 😂

程序锁介绍

互斥穆拉,独家。
A之后就成功了。
B之后,锁失败。
线程 b,aret。

旋转锁,继续旋转。
CPU、空等 不能使用单个CPU 核心。
抢占式调度是必须的。

读写锁,分为读和写。
读共享、读锁添加。
改变分词并写成add Hair。
读的多,写的效率低。

锁定以防止混乱。
我读了锁,他们介入了。