当前位置: 首页 > news >正文

深圳网站设计建设公司夸克浏览器网页版入口

深圳网站设计建设公司,夸克浏览器网页版入口,网页首页动态设计,wordpress源码好乱原子操作和锁 本文先探究并发问题#xff0c;再探究锁和原子操作解决问题的方式#xff0c;最后进行对比。 并发问题 首先#xff0c;我们看一下程序 num该程序表面看上去一步就可以运行完成#xff0c;但是实际上#xff0c;在计算机中是分三步运行的#xff0c;如下…原子操作和锁 本文先探究并发问题再探究锁和原子操作解决问题的方式最后进行对比。 并发问题 首先我们看一下程序 num该程序表面看上去一步就可以运行完成但是实际上在计算机中是分三步运行的如下图 该程序分为三个步骤 ①读取当前值首先程序需要读取变量 i 的当前值。过程为将从内存中加载 i’的值到CPU寄存器中 ② 增加值读取当前值将存在寄存器中的值加1而非在 i 的内存地址操作 ③ 写回新值将新的值写回到变量 i 所在的内存地址 假设 i 的初始值为0调用两个协程运行 i理想情况下i会变成2 运行过程中会有六步操作操作的不同顺序也影响着最后的结果 情况1 两个协程依次运行结果得到的是 2完美运行 情况2 当两个协程运行的顺序按上图运行得到的结果是1结果明显错误。 这就是并发过程中引起的错误。当多个goroutine在没有相互同步的情况下访问某个共享的资源同时对该资源进行读写时就会处于相互竞争的状态这就是并发中的资源竞争。 针对以上问题有两种解决方案一种是锁另一种是原子操作 锁 生活中的例子 想象一个场景只有一间厕所但有两个人都想上厕所显然厕所一个时刻只运行一个人使用。 第一个人使用前先将门锁上以防外面的人进来结束后再把门锁打开然后第二个人在锁门上厕所开锁。 程序改进 针对以上num程序我们可以类比操作。 第一个协程操作前上锁然后进行num操作运行结束后解锁。 接着第二个程序才能获取锁再运行num运行结束后解锁。 go代码如下 var mu sync.Mutexfunc mutexAdd(){mu.lock()nummu.unlock() }资源竞争 当多个协程进行资源竞争的时候在一个协程获取到锁的时候其余的协程进入阻塞态等待资源释放。当该协程运行结束后调度系统将阻塞队列其中的一个协程拿出来去获取锁这其中涉及到切换上下文操作需要消耗一定资源时间。 原子操作 原子操作即不会被打断的操作。 原子操作是不可分割的在执行完毕之前不会被其他任务或事物中断。 如上图i可以分为三个操作这三个操作均为原子操作。原子操作必须执行完毕后才能执行下一个操作。 有没有一种可能把这三个原子操作合成为一个原子操作 可以的在go的标准库atomic中提供了一系列原子操作其中有atomic.AddInt64(num,1),可以看作将num中的三步合并成了一步原子操作。 当num变成一步原子操作后便不会出现上述提出的并发问题。因为原子操作是必须一步完成的其中的过程不能和其他程序交错进行。 go代码如下 func atomicAdd(){atomic.AddInt64(num,1) }运行对比 单个协程 单个协程在原子操作和加锁操作下的对比 经过对比可以发现加锁操作步骤多耗损资源多运行效率没有原子操作高 多个协程 假设有两个协程同时运行协程G1先运行协程G2等待。以下分别是原子操作和加锁操作的区别 原子操作当协程G1运行结束后G2操作 在g1运行的时候g2循环等待g1运行结束g2开始执行程序结束 加锁操作当协程G1运行结束后G2操作 在g1运行的时候g2获取锁失败进入阻塞队列g1解锁后调度系统调度协程g2g2获取锁进入临界区切换上下文环境执行程序程序执行结束后解锁退出临界区 优势分析 原子操作优势 原子操作适用于对共享变量执行非常简单的操作如递增、递减、设置标志位等。它们的优势在于性能高在硬件级别上执行无需上下文切换或内核调度 原子操作劣势 原子操作无法处理复杂的操作序列也不能实现多个共享变量之间的复合操作。它们通常不能替代锁特别是在需要执行多个步骤或操作复杂数据结构时。 锁操作优势 锁适用于需要对多个共享变量执行复杂操作的场景允许实现复杂的并发算法并确保一致性。 锁操作劣势 而锁操作伴随着上下文切换和内核调度这会导致一些性能开销。如果不正常使用还容易导致死锁和竞态条件 针对以上自增操作显然原子操作更占优势。
http://www.pierceye.com/news/155616/

相关文章:

  • 平面构成作品网站手机网页qq登录
  • 厦门app开发网站开发公司电话重庆网站排名外包
  • 个人备案经营网站用自己网站做邮箱域名解析
  • 为什么大公司开发网站做英文网站网站犯法吗
  • 大连网站seo陇西网站建设公司
  • 电力建设工程质监总站网站域名使用费用一年多少钱
  • 建设单位网站经费请示上海外国语大学学风建设网站
  • 优秀网站管理员wordpress淘宝客模板下载
  • 广州越秀区网站建设手工制作简单又漂亮
  • 西安商城网站开发网站建设前台后台教程
  • 网站投放天津塘沽爆炸事件
  • 360网站安全检测自己买个服务器做网站
  • 临汾市网站建设网站版式分类
  • 广东的一起(17)做网站东莞建工集团企业网站
  • 最佳外贸英文网站模板六安网站设计公司
  • 为啥网站打开速度慢备案域名怎么弄
  • 门户网站建设主要内容深圳网站有哪些
  • 最好看的免费网站源码龙泉驿最新消息
  • 百度建立网站需要花多少钱学校门户网站建设工作
  • 网站安全防护方案沈阳网站建设策划方案
  • php做网站需要啥技术网站每年空间域名费用及维护费
  • 商城网站建设报个人免费网站
  • 公司网站开发建设wordpress首页加图片
  • 个人网站怎么写建设工程网站广州
  • 东阿网站制作如何在国外网站做推广
  • 宣城公司做网站潍坊市住房和城乡建设局网站
  • 用自己服务器做网站用备案wordpress弹窗订阅
  • 配色相关网站省住房城乡建设厅网站
  • 做汽车配件出口用什么网站好些求百度关键词搜索网站
  • 做网站到八方资源网怎么样公司网站首页如何做