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

易企网站建设网站新款模板

易企网站建设,网站新款模板,wordpress集成支付宝当面付,做网站后台运营这个工作怎么样Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式#xff0c;在使用过程中#xff0c;单例对象的类只有一个实例。使用单例模式#xff0c;1 可以节省内存等资源#xff0c;例如windows操作系统的资源管理器只有一个就够了。2 方便配置管理…Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式在使用过程中单例对象的类只有一个实例。使用单例模式1 可以节省内存等资源例如windows操作系统的资源管理器只有一个就够了。2 方便配置管理例如服务器的配置信息存放在一个文件中配置信息由一个单例实例统一读取进场中的其他对象通过这个单例实例获取配置信息。 实例1 下面这段代码有什么问题从多线程角度思考就会发现下面的代码是非线程安全的比如有两个线程都在调用NewInstance1函数线程A在执行到if instancenil后 cpu切换到线程B执行直到线程B运行完这时instance已经被实例化当cpu在切回到线程A继续执行的时候对instance又执行实例化操作这时内存中已有Instance的两个实例违背了单例定义。 type Instance struct{}//非线程安全 func NewInstance1() *Instance {if instance nil {instance Instance{}}return instance }实例2 var lock sync.Mutex//lock-check模式 func NewInstance2() *Instance {lock.Lock()defer lock.Unlock()if instance nil {instance Instance{}}return instance }实例3 实例3采用的是先判断方式如果instance已经被实例化直接返回就行了。如果没有实例化在进行加锁创建实例即执行实例2的操作。这样就可以并发执行。上面的实例2是先lock在check方式简称lock-check模式实例称为check-lock-check模式。继续思考实例3有没有问题呢if instancenil是原子操作吗 //check-lock-check模式 func NewInstance3() *Instance {if instance nil {lock.Lock()if instance nil {instance Instance{}}lock.Unlock()}return instance }实例4 既然实例3 比较操作是非原子操作那将比较这句改成原子操作golang 提供了原子操作package atomic申请一个uint32变量做标记如果是1表示已实例化如果是0表示么有实例化。实例4已经非常好了在golang有么有更好的方法呢 var initlized uint32//check-lock-check func NewInstance4() *Instance {if atomic.LoadUint32(initlized) 1 {return instance}lock.Lock()defer lock.Unlock()if initlized 0 {instance Instance{}atomic.StoreUint32(initlized, 1)}return instance}实例5 在golang中atomic包中提供一个sync.Once类型该类型有个Do方法只会执行一次 所以将实例化方法放在Do中只会实例化一次非常完美的方法所以实例5是最佳实践方法。 func NewInstance5() *Instance {if instance nil {once.Do(func() {instance Instance{}})}return instance }分析总结 在写代码的时候要保证正确性第一然后在考虑性能优化的问题实例1和实例3在正确性上没有保证。 其次才是考虑性能优化有没有更好的方法像实例2性能不友好实例4就比实例2有提升实例5是最佳实践方法。 当然实例3方法可以放在init函数中调用进程启动之后再掉用其实也没有问题因为instance已经被实例化过了。 程序的运行中只产生一个实例 Example_one type Singleton struct {id int }var TestSingleton *Singleton var singletonMutex sync.Mutexfunc NewSingleton() *Singleton {if TestSingleton nil {singletonMutex.Lock()defer singletonMutex.Unlock()if TestSingleton nil {TestSingleton Singleton{0}}}return TestSingleton }Example_two func NewSingleton() *Singleton {once.Do(func() {TestSingleton Singleton{0}})return TestSingleton }
http://www.sadfv.cn/news/200376/

相关文章:

  • 网站定制开发特点安徽建设工程造价信息网站
  • 奉贤宜昌网站建设自助打印微信小程序免费制作平台
  • 毕业设计微信小程序开发企业免费网站优化服务
  • 高端网站建设套餐建设网站的价格表
  • 贵州城乡住房建设部网站国外企业网站怎么做
  • 98元建网站企业注册地址变更流程
  • 优质网站建设是哪家网站开发与系统开发
  • 网站建设防火墙级别要求潍坊网站建设网超
  • 中国建设银行官网站账户商品加盟网页制作
  • 微信制作网站开发粉色的网站
  • 网站模板 商标医药代理网
  • 制作商城网站模板在哪个网站上做简历
  • 佛山营销型网站建设深圳公共资源交易平台
  • 遵义市住房城乡建设局网站龙口网站建设
  • 网站升级改版方案市场调研报告范文大全
  • 网站建设及推广好学习吗织梦cms 获得网站流量次数
  • 大理石在哪些网站做宣传网站登不上去的原因
  • 临海市建设局官网站前端网站优化
  • 培训网站建设方案成都信用建设网站
  • 设计的网站怎么添加域名电商推广计划
  • 美业o2o平台有哪些wordpress 国内 优化
  • 大连的网站设计公司电话网站制作公司优势
  • 快速让百度收录网站最近在线观看免费播放电视剧
  • 江苏省建设信息网站管理平台可口可乐自称小可网络营销
  • 下瓦房做网站公司快速优化关键词排名
  • 重庆定制型网站建设门户网站的基本特征有
  • 如何建设公司网站知乎连南网站建设
  • 深圳市招聘信息网站个人可以采集视频做网站吗
  • 门户网站建设困难网站标题 关键字
  • android开发者网站甘肃省 网站建设 审批