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

怎么看自己网站的空间微信公众平台号申请注册入口

怎么看自己网站的空间,微信公众平台号申请注册入口,长沙岳麓区广告公司,怎么做原创电影视频网站在介绍Go 1.23引入的unique包的《Go unique包#xff1a;突破字符串局限的通用值Interning技术实现》一文中#xff0c;我们知道了unique包底层是基于internal/weak包实现的#xff0c;internal/weak是一个弱指针功能的Go实现。所谓弱指针(Weak Pointer#xff0c;也称为弱… 在介绍Go 1.23引入的unique包的《Go unique包突破字符串局限的通用值Interning技术实现》一文中我们知道了unique包底层是基于internal/weak包实现的internal/weak是一个弱指针功能的Go实现。所谓弱指针(Weak Pointer也称为弱引用)是与强指针相对而言的强指针(Strong Pointer也可称作强引用)就是下面代码片段中的这种常规指针 var p *T  new(T) // 假设T类型对象被分配到堆上 只要p指向堆上的T对象那么T对象就无法被GC回收。但弱指针并非如此它也可以指向堆上的某个内存对象(比如T类型对象)但它无法像强指针那样阻止GC回收该对象。 Go unique包的实现者Michael Knyszek近期提议在标准库引入weak包[3](实际上是将internal/weak公开暴露给Go开发者)该提议被Russ Cox代表的Go提案评审委员会所接受最早将于Go 1.24版本落地。 在这篇短文中我们来前瞻一下weak包的API设计、原理、应用场景以及社区对该提案一些观点。 注weak包尚未落地本文中的代码在Go 1.23中均无法运行可以视作伪代码。 1. weak包的API weak包的核心是Pointer[T]类型它代表了对类型T的弱指针。以下目前Michael Knyszek为weak包设计的主要API type Pointer[T any] struct { ... }func Make[T any](ptr *T T any) Pointer[T]func (p Pointer[T]) Value() *T Make函数用于创建一个弱指针而Value方法则用于获取弱指针指向的实际值。如果原始对象已被垃圾回收Value方法将返回nil。这个设计秉承了Go一贯的简洁允许开发者轻松创建和使用弱指针同时保持了Go语言的类型安全特性。 2. weak包弱指针的工作原理 在开篇时我已经对弱指针的作用做了简单说明这里结合上述weak包的API和提案中的设计原理再扩展一下。 弱指针的核心思想是允许引用内存而不阻止垃圾回收器回收它。垃圾回收器在回收对象时会自动将所有指向该对象的弱指针设置为nil。这确保了弱指针不会产生悬空引用(dangling pointer)。 下图是weak包弱指针的工作原理示意图展示了weak pointer的核心工作原理包括间接对象的使用和垃圾回收时的行为 简单看一下这张图程序创建一个对象并通过weak.Make创建一个weak.Pointer(弱指针)在Go运行时内部weak.Pointer通过8字节的间接对象引用原始对象。这个间接对象是weak.Pointer的内部字段按当前internal/weak的实现来看该字段是一个unsafe.Pointer。这个间接对象包含了实际的弱引用。 值得注意的是弱指针的比较基于它们最初创建时使用的指针。即使原始对象被回收两个由相同指针创建的弱指针仍然会被认为是相等的。这个特性使得弱指针可以安全地用作map的键。 3. weak包的典型使用场景 weak包的引入将为Go带来更灵活的内存管理机制它允许开发者创建不会阻止垃圾回收的引用从而在保持内存效率的同时实现更复杂的数据结构和算法。特别是在处理缓存、规范化映射(Canonicalization mapping)[4]等场景时。 以缓存为例使用弱指针我们可以创建不会阻止被缓存对象被垃圾回收的缓存系统这对于管理内存敏感的大型缓存系统特别有用。下面提案中Russ Cox举的一个使用weak包实现简单缓存的示例(可理解为伪代码) type Cache[K any, V any] struct {f func(*K) Vm atomic.Map[uintptr, func() V] }func NewCache[K comparable, V any](f func(*K K comparable, V any)V) *Cache[K, V] {return Cache[K, V]{f: f} }func (c *Cache[K, V]) Get(k *K) V {kw : uintptr(unsafe.Pointer((k))vf, ok : c.m.Load(kw)if ok {return vf()}vf  sync.OnceValue(func() V { return c.f(k) })vf, loaded : c.m.LoadOrStore(kw, vf) // 原issue中似乎少了第二个参数vfif !loaded {// Stored kw→vf to c.m; add the cleanup.runtime.AddCleanup(k, c.cleanup, kw)}return vf() }func (c *Cache[K, V]) cleanup(kw uintptr) {c.m.Delete(kw) }var cached  NewCache(expensiveComputation) 这段代码定义了一个泛型缓存结构Cache它有两个类型参数K和V以及两个成员字段f和m f是一个函数接受*K类型的指针返回V类型的值这是用于计算缓存值的函数。m是一个原子映射键是K类型的弱指针值是返回V的函数。 NewCache是缓存的创建函数接受一个计算函数f返回初始化的Cache指针。 Cache类型的Get方法用于获取缓存的值它首先创建键k的弱指针kw然后以该弱指针为键尝试从缓存(atomicMap)中加载值。如果找到直接返回缓存的值。如果未找到使用sync.OnceValue创建一个只执行一次的函数调用c.f(k)计算值。之后尝试将新计算的函数存储到缓存中。如果成功存储即之前没有这个键添加一个清理函数最后返回计算后的Value值。 这个实现允许缓存中的键在不再被程序其他部分引用时被垃圾回收从而避免了内存长期占用或是泄漏。 4. 社区声音 针对该weak包提案Go社区的主要声音是支持的认为weak包将为Go带来更灵活的内存管理机制但也表示了对无法用好weak包这个低级机制的担忧希望在正式文档或Go Tour中包含更多使用关于weak包的示例和最佳实践。 Go新版GC的主要设计者Richard L. Hudson[5]提出了对sweeping storms和清理大型缓存中过时weak条目的担忧并提出了使用ephemerons[6]一种更复杂的弱引用机制的可能性但也认识到其实现复杂度和性能开销较高。 也有一些Go社区开发者保持了对weak包的谨慎态度比如fasthttp的维护者、VictorialMetrics[8]的联创Aliaksandr Valialkin[9] 就建议在决定如何在Go中实现弱指针之前最好先分析其他编程语言中弱指针的最常见的生产用例并首先思考一下在标准库中为这些实际用例提供更高级别的解决方案而不是暴露较低级别的弱指针的方案是否会更好。 也有gopher提出能否在提案中添加2-3个没有弱指针就无法解决的实际问题的例子但Michael Knyszek并未回应。 5. 小结 weak包的引入让Go的工具箱更加完整它为开发者提供了更细粒度的内存控制同时其核心API也保持了Go简单易用的特性。 对于Go开发者来说weak包使得某些复杂的内存管理场景变得更容易处理但也需要开发者更好地理解垃圾回收机制和弱引用的工作原理。 社区对weak包的引入持积极态度但也关注其实现细节、性能影响和最佳实践同时也意识到了使用weak指针时可能面临的挑战。 不过开发者在使用weak包时还是需要谨慎毕竟过度使用弱指针可能会使代码变得难以理解和维护最好的方法是将它用在最适合的场景下。 往期推荐 - Go unique包突破字符串局限的通用值Interning技术实现 - Go 1.21中值得关注的几个变化 - Go GC如何检测内存对象中是否包含指针 - htmxGopher走向全栈的完美搭档 - Go语言的“黑暗角落”盘点学习Go语言时遇到的那些陷阱 Gopher部落知识星球[10]在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时我们也会加强代码质量和最佳实践的分享包括如何编写简洁、可读、可测试的Go代码。此外我们还会加强星友之间的交流和互动。欢迎大家踊跃提问分享心得讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落享受coding的快乐! 欢迎大家踊跃加入 著名云主机服务厂商DigitalOcean发布最新的主机计划入门级Droplet配置升级为1 core CPU、1G内存、25G高速SSD价格5$/月。有使用DigitalOcean需求的朋友可以打开这个链接地址[11]https://m.do.co/c/bff6eed92687 开启你的DO主机之路。 Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com 我的联系方式 微博(暂不可用)https://weibo.com/bigwhite20xx微博2https://weibo.com/u/6484441286博客tonybai.comgithub: https://github.com/bigwhiteGopher Daily归档 - https://github.com/bigwhite/gopherdailyGopher Daily Feed订阅 - https://gopherdaily.tonybai.com/feed 商务合作方式撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。 参考资料 [1]  Go 1.23: https://tonybai.com/2024/08/19/some-changes-in-go-1-23 [2]  Go unique包突破字符串局限的通用值Interning技术实现: https://tonybai.com/2024/09/18/understand-go-unique-package-by-example/ [3]  Michael Knyszek近期提议在标准库引入weak包: https://github.com/golang/go/issues/67552 [4]  规范化映射(Canonicalization mapping): https://wiki.c2.com/?CanonicalizedMapping [5]  Richard L. Hudson: https://github.com/RLH [6]  ephemerons: https://dl.acm.org/doi/pdf/10.1145/263698.263733 [7]  fasthttp: https://tonybai.com/2021/04/25/server-side-performance-nethttp-vs-fasthttp [8]  VictorialMetrics: https://github.com/VictoriaMetrics/VictoriaMetrics [9]  Aliaksandr Valialkin: https://github.com/valyala [10]  Gopher部落知识星球: https://public.zsxq.com/groups/51284458844544 [11]  链接地址: https://m.do.co/c/bff6eed92687
http://www.hkea.cn/news/14517052/

相关文章:

  • 西安营销型网站国外做化工网站
  • 电子加工东莞网站建设住房和城乡建设厅官网证书查询
  • 国外对网站开发的研究广州网站建设广州网络推广公司
  • 河北pc端网站建设培训机构管理系统
  • 菏泽网站建设菏泽众皓网站关键词不稳定
  • 给你一个网站如何做推广专业郑州企业网站建设
  • php做的网站怎么让外网访问企业策划书模板word
  • 广州市住房和城乡建设局官方网站长春搜索引擎网站推广
  • 制作企业网站的新闻如何在自己电脑上建网站
  • 刷赞网站建设网上商城网站开发与建立的意义
  • wordpress自动把内容变成图片优化排名对网站不好
  • 南京金融网站建设网络媒体广告公司
  • 广州知名的网站建设公司网站制作完成
  • 3d做ppt模板下载网站钻戒网站建设需求
  • 国外有哪些做deal的网站广州 网站制作 网站推广
  • 免费网站建站 网页恢复2345网址导航
  • 申请域名后怎样做网站百度收录网站多久
  • 顺德网站建设公司咨询苏州建筑工程有限公司
  • 陕西省泰烜建设集团有限公司网站上海今天死亡新闻
  • 便宜做网站代做设计的网站
  • 企业网站建设和运营著名的外贸网站
  • 做网站策划计划书wordpress 虎嗅
  • 百度站长平台怎么验证网站网站需求分析的主要内容
  • 增城微网站建设网站兼容哪些浏览器
  • 好看的网站后台做我女朋友的表白句的网站
  • php投资理财企业网站模板58同城网站建设推广网站建设
  • 微网站设计与开发重庆seo排名方法
  • 网站制作费用多少钱企业网站报价方案下载
  • 学生网站建设首页前端开发培训学费
  • 企业网站的建立与维护论文ps网站怎么做滑动背景