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

网站icp备案信息商品营销推广的方法有哪些

网站icp备案信息,商品营销推广的方法有哪些,wordpress 头像上传,做个公司网页一般需要多少钱golang中goroutine由运行时管理#xff0c;使用go关键字就可以方便快捷的创建一个goroutine,受限于服务器硬件内存大小#xff0c;如果不对goroutine数量进行限制#xff0c;会出现Out of Memory错误。但是goroutine泄漏引发的血案#xff0c;想必各位gopher都经历过#… golang中goroutine由运行时管理使用go关键字就可以方便快捷的创建一个goroutine,受限于服务器硬件内存大小如果不对goroutine数量进行限制会出现Out of Memory错误。但是goroutine泄漏引发的血案想必各位gopher都经历过通过协程池限制goroutine数一个有效避免泄漏的手段,但是自己手动实现一个协程池总是会兼顾不到各种场景比如释放处理panic,动态扩容等。那么ants是公认的优秀实现协程池。 ants简介    ants是一个高性能的 goroutine 池实现了对大规模 goroutine 的调度管理、goroutine 复用允许使用者在开发并发程序的时候限制 goroutine 数量复用资源达到更高效执行任务的效果 功能 自动调度海量的 goroutines复用 goroutines 定期清理过期的 goroutines进一步节省资源 提供了大量有用的接口任务提交、获取运行中的 goroutine 数量、动态调整 Pool 大小、释放 Pool、重启 Pool 优雅处理 panic防止程序崩溃 资源复用极大节省内存使用量在大规模批量并发任务场景下比原生 goroutine 并发具有更高的性能 非阻塞机制 Go 语言最大的特色之一就是其从语言的层面支持并发。Go 语言使用了其特有的 goroutine 作为最基本的并发执行单元以协程的方式实现了更加轻量和高效的并发执行。然而goroutine 缺乏一个高级的管理机制原生情况下使用要实现动态调整数量、内存资源复用、错误处理等往往需要编写比较多的底层代码逻辑。Ants这个 goroutine 池实现提供了对于大规模 goroutine 的管理功能相比原生实现资源使用率和执行性能都有了很大的提升。 ants pool 简介 Ants是 panjf2000 在 Github 上开源的高性能 goroutine 池项目位于 目前版本为 v2.4.0。Ants 实现了对于大规模 goroutine 的调度管理和复用允许使用者在开发 Golang 并发程序时限制 goroutine 数量复用资源达到更高效执行任务的效果。Ants 提供了大量有用的接口包括任务提交、获取运行中的 goroutine 数量、动态调整池带下、释放和重启池等。Ants 通过优秀的资源复用策略极大地节省内存使用量在大规模批量并发任务场景下比原生的 goroutine 实现的并发具有更高的性能。 Github项目 安装 Ants 使用 Go 语言开发需要 Go 1.8.x 以上。Ants 目前同时维护 v1 和 v2 版本安装 v1 版本 go get -u github.com/panjf2000/ants v2 版本需要使用 go module 支持开启 GO111MODULEon go get -u github.com/panjf2000/ants/v2 godoc文档 示例 Ants 对于任务的执行原理比较直观通过一个工作池的形式维护 goroutine 集合。当向工作池提交任务时从池中取出 worker 来执行。如果已经存在可用的 goroutine 了那么直接开始执行如果没有则需要判断是否已经达到容量上限。如果还没有超过那就意味着可用的 worker 比容量更少此时启动新的 worker 来执行。而如果容量已经用完就依据是否为阻塞模式来马上返回或是阻塞等待。 ants工作池等待 当任务执行完毕对应的 worker 就会得到释放重新回到池中等待下一个任务的调度实现 goroutine 的复用。 ants复用 完整的工作池 worker 调度的逻辑和流程如下 ants任务执行流程 Ants 支持不同的使用方式可以直接使用 Submit 接口使用默认配置的工作池完成任务执行。Submit 函数的定义如下 func Submit(task func()) error 通过提供一个函数类型的任务参数来把任务提交到工作池执行。我们来看一个简单的使用例子 package mainimport (fmtsynctimegithub.com/panjf2000/ants/v2 )func demoFunc() {time.Sleep(10 * time.Millisecond)fmt.Println(Hello World!) }func main() {defer ants.Release()runTimes : 1000var wg sync.WaitGroupsyncCalculateSum : func() {demoFunc()wg.Done()}for i : 0; i runTimes; i {wg.Add(1)_ ants.Submit(syncCalculateSum)}wg.Wait()fmt.Printf(running goroutines: %d\n, ants.Running())fmt.Printf(finish all tasks.\n) } 在这个例子中定义了一个简单的任务函数 demoFunc短暂休眠后打印 Hello World。在 main 函数中使用了 sync.WaitGroup 来进行并发控制把 demoFunc 包裹成为一个并发任务函数 syncCalculateSum。我们要把这个任务执行 1000 次就可以通过循环进行 1000 次的 ants.Submit 调用把所有任务都提交到工作池执行。提交完成后等待任务完成。程序在完成了 1000 次的 Hello World 打印后最终完成了任务执行。 除了使用默认的工作池外我们还可以自己实例化一个工作池并提供容量和任务函数使用 NewPoolWithFunc 简单完成 goroutine 池的创建 package mainimport (fmtsyncsync/atomictimegithub.com/panjf2000/ants/v2 )var sum int32func myFunc(i interface{}) {n : i.(int32)atomic.AddInt32(∑, n)fmt.Printf(run with %d\n, n) }func main() {runTimes : 1000// 创建一个容量为10的goroutine池p, _ : ants.NewPoolWithFunc(10, func(i interface{}) {myFunc(i)wg.Done()})defer p.Release()for i : 0; i runTimes; i {wg.Add(1)_ p.Invoke(int32(i))}wg.Wait()fmt.Printf(running goroutines: %d\n, p.Running())fmt.Printf(finish all tasks, result is %d\n, sum) } 可以看到使用 ants.NewPoolWithFunc创建了一个自定义容量和任务的函数工作池任务函数可以提供一个 interface{} 参数方便传递数据。然后通过函数工作池的 Invoke 接口完成任务参数的传递和任务的提交。在这个例子中实现了从 0 到 1000 的并发求和最终打印出计算结果。 此外我们还可以使用最基础的方法 NewPool 来进行 ants.Pool 结构的实例化 p, _ : ants.NewPool(10000) NewPool 的函数签名如下 func NewPool(size int, options ...Option) (*Pool, error) 其接收一个容量参数以及其他配置参数返回指向 Pool 类型实例的指针和错误。我们可以使用 options 参数进行更为细化的配置配置参数包括 ExpiryDuration清理 goroutine 的时间间隔。每隔一段时间Ants 就会对池中未被使用的 goroutine 进行清理减少内存占用PreAlloc是否在初始化工作池时预分配内存。对于一个超大容量且任务耗时长的工作池来说预分配内存可以大幅降低 goroutine 池中的内存重新分配损耗MaxBlockingTasks阻塞任务的最大数0代表无限制Nonblocking工作池是否是非阻塞的这决定了 Pool.Submit 接口在提交任务时是否会被阻塞PanicHandler任务崩溃时的处理函数Logger日志记录器 这些参数既可以在初始化的时候通过 Option 传递也可以使用链式调用的方法实现配置叠加利用 WithExpiryDuration、WithPreAlloc 等方法实现。 Ants 的工作池的容量需要在初始化的时候提供但它并不是一成不变的可以通过 Tune 接口实现 goroutine 池容量的动态调整 pool.Tune(1000) pool.Tune(100000) 这个方法时线程安全的不必担心动态调整带来的数据并发问题。 在使用完成后需要对工作池进行资源释放一般通过 defer 机制调用 pool.Release() 也可以通过 Reboot 方法把一个已经释放资源被销毁的池重新激活投入使用 pool.Reboot() Ants 以其高性能和低消耗著称自然有测试依据。项目作者进行了 1000 万大规模并发任务执行的性能测试Ants 使用 70 万的 goroutine 就完成了全部任务执行速度比原生 goroutine 提高了 100%且内存消耗保持在不使用 Pool 的 40%。此外还进行了吞吐量测试使用 Ants 的吞吐性能达到了原生 goroutine 的 2 到 6 倍而内存消耗则达到 10 到 20 倍的降低。从测试结果来看Ants 的高性能特性名不虚传。 性能测试 总结 Ants 作为一个高性能 goroutine 池提供了比原生 goroutine 实现更为高级的调度管理和复用机制抽象层次更高且充分利用池化策略使用尽可能少的 goroutine 数量和内存占用以更快的速度完成并发任务的执行在大规模和高吞吐场景下具备很强的性能优势。Ants 项目代码整洁注释详尽文档丰富对于 goroutine 并发模型有较深的理解对相关领域感兴趣的开发者可以进行参考学习。
http://www.pierceye.com/news/382462/

相关文章:

  • 北京鲜花的网站建设做任务网站有哪些内容
  • 互联网营销网站建设印章在线生成
  • 厦门seo网站管理南宁广告网页设计人才招聘
  • 沂水住房与城乡建设局网站wordpress如何建立论坛
  • 贵州省文化旅游网站建设的必要性查网站流量的网址
  • 自己做的网站怎么传到空间啊平面设计技术培训机构
  • php 做网站xml地图回龙观手机网站开发服务
  • 四川建设工程网上合同备案网站如何重新打开wordpress
  • 免费个人网站模板下载qq邮箱企业邮箱注册
  • 泰兴市网站建设wp怎么打开wordpress
  • wordpress可以建哪些网站吗开发app需要多少人
  • 0基础学做网站什么做网站做个网站一般要多少钱啊
  • 外贸营销型网站建设多少钱wordpress付费浏览
  • 网站空间可以换吗进网站备案
  • 番禺建设网站开发软件工程专业介绍
  • 如何做网站定位网站建设报价新鸿儒
  • 商务网站建设包含了河北招投标公共服务平台
  • 高权重网站怎么发软文外贸平台app
  • nas服务器 做网站网页设计页面图片
  • 青海建设协会网站电子商务网站备案
  • 性价比高的广州网站建设不同用户入口的网站样板
  • 投资交易网站开发黑镜wordpress主题破解
  • 文化传媒公司网站建设西渡网站建设
  • 购物网站为什么做移动端seo优化快速排名
  • iis服务器网站301重定向怎么做国家企业信息公开网查询系统
  • 免费家具网站模板做网站去什么公司好
  • 五个网站南宁网页制作培训
  • 枣庄建设网站wordpress如何自己编辑
  • 河南省城乡住房建设厅网站首页哪个公司网站备案快
  • 湘潭做网站价格优选磐石网络微信里怎么进入自己的公众号