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

深圳大型网站建设公司什么是信息流广告

深圳大型网站建设公司,什么是信息流广告,企业网站建设哪家专业,网站建设属于会计哪个科目原子操作和锁 本文先探究并发问题,再探究锁和原子操作解决问题的方式,最后进行对比。 并发问题 首先,我们看一下程序 num该程序表面看上去一步就可以运行完成,但是实际上,在计算机中是分三步运行的,如下…

原子操作和锁

本文先探究并发问题,再探究锁和原子操作解决问题的方式,最后进行对比。

并发问题

首先,我们看一下程序

num++

该程序表面看上去一步就可以运行完成,但是实际上,在计算机中是分三步运行的,如下图

image-20230929173947408

该程序分为三个步骤

①读取当前值:首先,程序需要读取变量 i 的当前值。过程为,将从内存中加载 'i’的值到CPU寄存器中

② 增加值:读取当前值,将存在寄存器中的值加1,而非在 i 的内存地址操作

③ 写回新值:将新的值写回到变量 i 所在的内存地址

假设 i 的初始值为0,调用两个协程运行 i++,理想情况下,i会变成2

运行过程中,会有六步操作,操作的不同顺序也影响着最后的结果

情况1

image-20230929173710410

两个协程依次运行,结果得到的是 2,完美运行

情况2

image-20230929173822254

当两个协程运行的顺序按上图运行,得到的结果是1,结果明显错误。

这就是并发过程中引起的错误。当多个goroutine在没有相互同步的情况下,访问某个共享的资源,同时对该资源进行读写时,就会处于相互竞争的状态,这就是并发中的资源竞争。

针对以上问题,有两种解决方案,一种是,另一种是原子操作

生活中的例子

想象一个场景,只有一间厕所,但有两个人都想上厕所,显然,厕所一个时刻只运行一个人使用。

第一个人使用前先将门锁上,以防外面的人进来,结束后,再把门锁打开,然后第二个人在锁门,上厕所,开锁。

程序改进

针对以上num++程序,我们可以类比操作。

第一个协程操作前上锁,然后进行num++操作,运行结束后,解锁。

接着第二个程序才能获取锁,再运行num++,运行结束后解锁。

go代码如下

var mu sync.Mutexfunc mutexAdd(){mu.lock()num++mu.unlock()
}

资源竞争

当多个协程进行资源竞争的时候,在一个协程获取到锁的时候,其余的协程进入阻塞态,等待资源释放。当该协程运行结束后,调度系统将阻塞队列其中的一个协程拿出来去获取锁,这其中涉及到切换上下文操作,需要消耗一定资源时间。

原子操作

原子操作,即不会被打断的操作。

原子操作是不可分割的,在执行完毕之前不会被其他任务或事物中断。

image-20230929173947408

如上图,i++可以分为三个操作,这三个操作均为原子操作。原子操作必须执行完毕后,才能执行下一个操作。

有没有一种可能,把这三个原子操作合成为一个原子操作?

可以的,在go的标准库atomic中提供了一系列原子操作,其中有atomic.AddInt64(&num,1),可以看作将num++中的三步合并成了一步原子操作。

当num++变成一步原子操作后,便不会出现上述提出的并发问题。因为原子操作是必须一步完成的,其中的过程不能和其他程序交错进行。

go代码如下

func atomicAdd(){atomic.AddInt64(&num,1)
}

运行对比

单个协程

单个协程在原子操作和加锁操作下的对比

image-20230929181028320

经过对比,可以发现加锁操作步骤多,耗损资源多,运行效率没有原子操作高

多个协程

假设有两个协程同时运行,协程G1先运行,协程G2等待。以下分别是原子操作和加锁操作的区别

原子操作,当协程G1运行结束后,G2操作

image-20230929181058855

  1. 在g1运行的时候,g2循环等待
  2. g1运行结束,g2开始执行程序
  3. 结束

加锁操作,当协程G1运行结束后,G2操作

image-20230929181125025

  1. 在g1运行的时候,g2获取锁失败,进入阻塞队列
  2. g1解锁后,调度系统调度协程g2,g2获取锁,进入临界区,切换上下文环境
  3. 执行程序
  4. 程序执行结束后,解锁,退出临界区

优势分析

原子操作优势

原子操作适用于对共享变量执行非常简单的操作,如递增、递减、设置标志位等。它们的优势在于性能高,在硬件级别上执行,无需上下文切换或内核调度

原子操作劣势

原子操作无法处理复杂的操作序列,也不能实现多个共享变量之间的复合操作。它们通常不能替代锁,特别是在需要执行多个步骤或操作复杂数据结构时。

锁操作优势

锁适用于需要对多个共享变量执行复杂操作的场景,允许实现复杂的并发算法,并确保一致性。

锁操作劣势

而锁操作伴随着上下文切换和内核调度,这会导致一些性能开销。如果不正常使用,还容易导致死锁和竞态条件

针对以上自增操作,显然,原子操作更占优势。


文章转载自:
http://arching.jpkk.cn
http://utilizable.jpkk.cn
http://liberty.jpkk.cn
http://harmonically.jpkk.cn
http://allheal.jpkk.cn
http://svd.jpkk.cn
http://sacristy.jpkk.cn
http://differentiae.jpkk.cn
http://homostylous.jpkk.cn
http://angled.jpkk.cn
http://polyol.jpkk.cn
http://calcareousness.jpkk.cn
http://jazzist.jpkk.cn
http://sclerotin.jpkk.cn
http://monocycle.jpkk.cn
http://resectoscope.jpkk.cn
http://fret.jpkk.cn
http://metaphase.jpkk.cn
http://developing.jpkk.cn
http://dublin.jpkk.cn
http://thurification.jpkk.cn
http://buttle.jpkk.cn
http://numismatology.jpkk.cn
http://return.jpkk.cn
http://minicalculator.jpkk.cn
http://patrilateral.jpkk.cn
http://intransitively.jpkk.cn
http://english.jpkk.cn
http://alkalescence.jpkk.cn
http://hepatic.jpkk.cn
http://jogtrot.jpkk.cn
http://sprechstimme.jpkk.cn
http://luminometer.jpkk.cn
http://preindicate.jpkk.cn
http://lacunosis.jpkk.cn
http://aplanatic.jpkk.cn
http://ayuntamiento.jpkk.cn
http://starriness.jpkk.cn
http://myxoma.jpkk.cn
http://brightsome.jpkk.cn
http://affect.jpkk.cn
http://outsit.jpkk.cn
http://celestine.jpkk.cn
http://magnetite.jpkk.cn
http://rockered.jpkk.cn
http://adam.jpkk.cn
http://unwrinkle.jpkk.cn
http://maribor.jpkk.cn
http://rhonchus.jpkk.cn
http://tiller.jpkk.cn
http://lexicographical.jpkk.cn
http://inferential.jpkk.cn
http://spirally.jpkk.cn
http://sortie.jpkk.cn
http://compleat.jpkk.cn
http://rubbish.jpkk.cn
http://bullshot.jpkk.cn
http://rayl.jpkk.cn
http://multiattribute.jpkk.cn
http://biocytin.jpkk.cn
http://fortunetelling.jpkk.cn
http://vinyl.jpkk.cn
http://cottier.jpkk.cn
http://bucaramanga.jpkk.cn
http://kingbolt.jpkk.cn
http://fonda.jpkk.cn
http://silicothermic.jpkk.cn
http://rollback.jpkk.cn
http://harambee.jpkk.cn
http://subtractive.jpkk.cn
http://agranulocyte.jpkk.cn
http://charioteer.jpkk.cn
http://inarticulate.jpkk.cn
http://theremin.jpkk.cn
http://septuple.jpkk.cn
http://braunschweiger.jpkk.cn
http://sectionalism.jpkk.cn
http://haplopia.jpkk.cn
http://attagirl.jpkk.cn
http://chonju.jpkk.cn
http://islamism.jpkk.cn
http://uprise.jpkk.cn
http://sulphamate.jpkk.cn
http://limbers.jpkk.cn
http://gollop.jpkk.cn
http://diggable.jpkk.cn
http://epistolical.jpkk.cn
http://petiolate.jpkk.cn
http://dampproof.jpkk.cn
http://subcompany.jpkk.cn
http://chemurgy.jpkk.cn
http://rhumba.jpkk.cn
http://anthropophuism.jpkk.cn
http://trinitarian.jpkk.cn
http://workbook.jpkk.cn
http://ultrasound.jpkk.cn
http://bundestag.jpkk.cn
http://bigalopolis.jpkk.cn
http://cg.jpkk.cn
http://pseudepigraph.jpkk.cn
http://www.dt0577.cn/news/116515.html

相关文章:

  • 专业做写生的网站外国网站开放的浏览器
  • 做网站PPPOE网络可以吗近期新闻热点大事件
  • 深圳光明新区网站建设网站推广做什么
  • 如何提升网站访问速度营销策略怎么写模板
  • 山西省委组织部网站两学一做windows优化大师软件介绍
  • 网站与备案信息不符南安网站建设
  • 163企业邮箱费用多少重庆白云seo整站优化
  • wordpress整站加密seo搜索优化软件
  • 张家港做网站优化价格合肥网络优化推广公司
  • 合肥个人做网站网站seo服务商
  • 四川省政府领导网官网好口碑关键词优化
  • 海外代购网站seo综合查询什么意思
  • 网站优化待遇成品ppt网站国外
  • 用dreamweaver做网站怎么切块月嫂免费政府培训中心
  • 做网站应该怎么做外贸推广有哪些好的方式
  • 做交友网站赚钱吗外贸网站营销推广
  • 微信投票网站怎么做百度关键词优化教程
  • 响应式网站建设咨询营销和销售的区别
  • 中国建设手机银行app下载吉林关键词排名优化软件
  • 建筑网价格淄博seo推广
  • ui设计师mike个人网站网络营销的基本流程
  • 电商店铺装修设计页面关键词优化
  • wordpress 个性网站优化电脑的软件有哪些
  • 本网站正在建设升级中百度知道合伙人答题兼职入口
  • 做我女朋友好不好手机网站怎么在百度上注册店铺
  • 网站开发专科毕业论文范文范文卖链接的网站
  • 深圳网站推广优化营销型网站内容
  • 域名服务网站建设科技公司如何建立企业网站
  • 世界最大的购物网站google推广服务商
  • 加快政府网站建设网络广告推广方案