社区
Linux_Kernel
帖子详情
为什么锁会降低程序的性能?
_薛定谔猫
2019-03-28 03:05:21
我之前看过文章说的是锁降低性能降低在多个线程争夺锁,内核态和用户态之间的切换,想问一下切换在哪?锁是在内核中管理的么?
...全文
1347
6
打赏
收藏
为什么锁会降低程序的性能?
我之前看过文章说的是锁降低性能降低在多个线程争夺锁,内核态和用户态之间的切换,想问一下切换在哪?锁是在内核中管理的么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
JFET238
2019-08-06
打赏
举报
回复
加解锁和线程切换 都要系统开销的
lyfll
2019-07-17
打赏
举报
回复
每一个请求都会占用一个线程,例如,当请求量过大,此服务器设计规定可跑1000线程,当并发达或者请求量同时超过1000线程时,并且系统未处理完请求,这些线程就是独占,所有超过1000的线程就要进行排队,倒置线程堵塞。
zhgure
2019-07-16
打赏
举报
回复
楼上说的很好了,补充一下二楼说的,切换发生在B阻塞发生时,本来B线程是当前正在占用CPU的,由于发生了阻塞,所以B线程被切换了,CPU又调度到别的线程执行。
zgsdgrr
2019-07-10
打赏
举报
回复
因为就像是马路上的红绿,汽车跑到红灯的时候会停下来,绿灯才能继续跑
john_liqinghan
2019-04-26
打赏
举报
回复
linux上下文切换的代价是很大的。
xh.wang
2019-04-24
打赏
举报
回复
应该这么理解,比如2个线程用一个锁。当A先调用锁,锁住,然后进行处理。这时候B假如要用该锁,那就必须等A解锁才可以使用,这个时候B是阻塞的。
微信小
程序
系统教程C#版[3/3阶段]_微信小
程序
电商系统
微信小
程序
系统教程[初级阶段],微信小
程序
0基础学起,讲解微信小
程序
开发的基础知识。 微信小
程序
系统教程共有“微信小
程序
系统教程[初级阶段]”、“微信小
程序
系统教程[中级阶段]——核心技术”、“微信小
程序
系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小
程序
系统教程[阶段]全套课程”包含: 1.微信小
程序
系统教程[阶段]_客服消息 2.微信小
程序
系统教程[阶段]_微信支付 3.微信小
程序
系统教程[阶段]_九宝电商系统 学习“微信小
程序
系统教程[阶段]”要求有微信小
程序
的基础。建议先学习“微信小
程序
系统教程[初级阶段]”、“微信小
程序
系统教程[中级阶段]”,后在报名“微信小
程序
系统教程[阶段]”。 阶段讲解的客服消息,是针对小
程序
的。后台
程序
用接近底层的技术,没有使用三方技术。这样
降低
同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源
程序
。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小
程序
相关知识,还可以修改后上线。 “微信小
程序
系统教程[中级阶段]——核心技术”重点讲解微信小
程序
事件、组件、API 微信小
程序
系统教程[初级阶段],微信小
程序
0基础学起,讲解微信小
程序
开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小
程序
开发宝典》。 购课请咨询qq2326321088
【Spring】高并发下如何提高“锁”
性能
?
在项目中,尤其是电商或者做游戏开发的,高并发是必然的,但在高并发的环境下,大家会经常使用到锁。“锁” 是最常用的同步方法之一。但激烈的锁竞争会导致
程序
的
性能
下降,严重的甚至能导致 “死锁”的产生。这个时候,可能会有小伙伴会说,可以使用多线程啊。使用多线程的确可以明显地提高系统的
性能
。但事实上,使用多线程的方式会额外增加系统的开销。对于多线程应用来说, 系统除了处理功能需求外,还需要额外维护多线程环境的特有信息,如线程本身的元数据、线程的调度、线程上下文的切换等。
自旋锁的优缺点?
自旋锁不会引起调用者休眠,如果自旋锁已经被别的线程保持,调用者就一直循环在那里看是否该自旋 锁的保持者释放了锁。由于自旋锁不会引起调用者休眠,所以自旋锁的效率远高于互斥锁。 虽然自旋锁效率比互斥锁高,但它会存在下面两个问题: 1、自旋锁一直占用CPU,在未获得锁的情况 下,一直运行,如果不能在很短的时间内获得锁,会导致CPU效率
降低
。 2、试图递归地获得自旋
锁会
引起死锁。递归
程序
决不能在持有自旋锁时调用它自己,也决不能在递归调用时试图获得相同的自旋 锁。 由此可见,我们要慎重的使用
十分钟带你深入了解多线程——多线程关于锁的优化(一)
一、有助于提高锁
性能
的几点建议 锁的竞争必然会导致
程序
的整体
性能
下降。为了将这种副作用降到最低,这里提出一些关于使用锁的建议,希望可以帮助大家写出
性能
更高的
程序
。 1、减少锁持有时间 对于使用锁进行并发控制的应用
程序
而言,在锁竞争过程中,单个线程对锁的持有时间与系统
性能
有着直接的关系。如果线程持有锁的时间越长,那么相对地,锁的竞争程度也就越激烈。可以想象一下,如果要求100 个人各自填写自己的身份信息,但是只给他们一支笔,那么如果每个人拿着笔的时间都很长,总体所花的时间就会很长。如果真的只有一支笔共享给10
redis 分布式锁有什么缺陷?
例如,如果锁的过期时间是1秒钟,但是某个进程或线程在执行某个操作时需要1.5秒钟,那么在这个操作执行完成之前锁就会被自动释放。例如,如果对整个Redis实例进行加锁,那么所有需要对Redis进行读写操作的线程都会被阻塞,影响整个系统的并发
性能
。高可用问题:如果使用Redis单实例进行分布式锁的实现,那么一旦Redis实例出现故障,整个分布式锁系统将会失效。死锁风险:分布式锁在获取锁和释放锁之间可能存在异常情况,如获取锁后崩溃或释放锁时网络异常,这可能导致死锁的情况。
Linux_Kernel
4,441
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章