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

做门图网站软件界面设计要求

做门图网站,软件界面设计要求,网站推广要点 优帮云,二级子域名ip地址查询一、互斥锁 先看一个并发情况#xff0c;同时操作一个全局变量#xff0c;如果没有锁会怎么样 假设有1000个goroutines并发进行银行余额的扣除#xff0c;每次都扣除10元#xff0c;起始的总余额是10000#xff0c;理论上并发执行完应该是0对不对#xff0c;但实际却不…一、互斥锁 先看一个并发情况同时操作一个全局变量如果没有锁会怎么样 假设有1000个goroutines并发进行银行余额的扣除每次都扣除10元起始的总余额是10000理论上并发执行完应该是0对不对但实际却不是 import (fmtsync )var balance uint 10000func withdraw(amount uint) {balance balance - amountfmt.Println(剩余存款, balance)defer wg.Done() }func getBalance() uint {return balance }func main() {for i : 1; i 1000; i {wg.Add(1)go withdraw(10)}wg.Wait()fmt.Println(getBalance()) }得到的结果如下 这时候就需要引入一个锁来保护balance全局变量在并发goroutines执行的情况下防止其他goroutines获取到balance变量进行操作其他goroutines会处于等待锁的状态 import (fmtsync )var balance uint 10000 var mu sync.Mutex var wg sync.WaitGroupfunc withdraw(amount uint) {//如果其它的goroutine已经获得了这个锁的话这个操作会被阻塞直到其它goroutine调用了Unlock使该锁变回可用状态。mutex会保护共享变量。mu.Lock() ******************* 增加锁 **********************balance balance - amountfmt.Println(剩余存款, balance)mu.Unlock() ******************* 释放锁 **********************defer wg.Done() }func getBalance() uint {return balance }func main() {for i : 1; i 1000; i {wg.Add(1)go withdraw(10)}wg.Wait()fmt.Println(getBalance()) } 得到的结果如下 二、读写锁 RWMutex即读写互斥锁适用于读操作远远多于写操作的场景当多个goroutine需要频繁地读取某个共享资源而写入操作相对较少时使用RWMutex可以提高并发性能。 func getBalance() uint {rwMu.RLock() ********* 加锁读取 ********defer rwMu.RUnlock() ********* 返回释放锁 ********return balance } 原理RWMutex允许多个goroutine同时获取读锁RLock进行并发读操作而写锁Lock则是互斥的同一时间只允许一个goroutine进行写操作。当一个goroutine获取读锁时其他goroutine也可以继续获取读锁来读取数据而不需要等待。只有当有goroutine尝试获取写锁时读锁才会被阻塞这样可以有效地提高并发读取的效率。 sync.RWMutex锁的设计就是为了优化读操作频繁的场景。它能够区分读锁RLock和写锁Lock 读锁RLock 当一个goroutine需要读取共享资源时它会尝试获取读锁。如果当前没有其他goroutine持有写锁那么它可以成功获取读锁并且可以并发地读取数据。如果有其他goroutine已经持有读锁新的读锁请求也会被允许从而允许多个goroutine同时读取。 写锁Lock 当一个goroutine需要写入共享资源时它会尝试获取写锁。在写锁被获取之前所有的读锁和写锁请求都会被阻塞。这意味着一旦有goroutine开始写操作其他想要读取或写入的goroutine都必须等待直到写操作完成并且写锁被释放。 锁的释放 当一个goroutine完成读取或写入操作后它会释放相应的锁。如果是读操作完成它会释放读锁这样其他正在等待的goroutine就可以获取读锁并开始读取。如果是写操作完成它会释放写锁这样其他正在等待的读锁或写锁请求就可以继续进行。 RWMutex的这种设计使得在读操作远多于写操作的情况下可以提高程序的并发性能。因为多个goroutine可以同时读取而不需要等待写操作完成这样就减少了锁竞争提高了整体的吞吐量。然而需要注意的是RWMutex并不是在所有情况下都能提高性能。如果写操作非常频繁或者读写操作几乎同等频繁使用RWMutex可能会导致性能下降因为写操作会阻塞所有读锁和写锁的请求。在这种情况下使用Mutex可能会更加合适。
http://www.w-s-a.com/news/177902/

相关文章:

  • 网站安全证书过期怎么办那个视频网站最好最全网址
  • 外贸上哪个网站开发客户建行个人网上银行登录入口
  • 空间除了可以做网站还能干什么qq钓鱼网站
  • 网站 技术企业网站用免费程序
  • 做网站的中文名字汕尾网站开发
  • 网站推广效果推广网站推荐
  • 腾讯企业网站建设网络推广比较经典和常用的方法有
  • 四川成都网站网页设计上海外贸网站制作公司
  • wordpress模板首页图片锦州网站做优化
  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx
  • 广撒网网站怎么进行网络营销
  • 中职计算机网站建设教学计划电商网站如何避免客户信息泄露
  • 惠州微网站建设外贸进出口代理公司
  • 网站建设最常见的问题建设银行网站机构
  • 网站集群建设相关的招标南通seo网站建设费用
  • 网络培训的网站建设能够做二维码网站
  • 网站类游戏网站开发wordpress 文章首标点
  • 徐州网站建设熊掌号免费推广网站入口2020
  • 网站建设有前途长春高铁站
  • 做网站网课阿里云域名查询系统
  • saas建站平台有哪些简述网站建设基本流程答案
  • 个人怎么做网站网站浏览思路
  • 网站建设里的知识长沙网络营销公司
  • 网站建设与维护大作业pc网站转换成微网站
  • php网站开发经典教材东莞网站开发
  • 教育培训手机网站模板下载跨境电商培训哪家最好
  • 网站开发淄博网站被降权会发生什么影响吗
  • 网站开发常用的语言东城手机网站制作