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

网站建设规划任务书wordpress漏洞挖掘

网站建设规划任务书,wordpress漏洞挖掘,麻涌镇做网站,网站设计宽度目录Golang闭包问题及并发闭包问题匿名函数闭包闭包可以不传入外部参数#xff0c;仍然可以访问外部变量闭包提供数据隔离并发闭包为什么解决方法Golang闭包问题及并发闭包问题 参考原文链接#xff1a;https://blog.csdn.net/qq_35976351/article/details/81986496 ​ htt… 目录Golang闭包问题及并发闭包问题匿名函数闭包闭包可以不传入外部参数仍然可以访问外部变量闭包提供数据隔离并发闭包为什么解决方法Golang闭包问题及并发闭包问题 参考原文链接https://blog.csdn.net/qq_35976351/article/details/81986496 ​ https://www.calhoun.io/what-is-a-closure/ ​ https://blog.cloudflare.com/a-go-gotcha-when-closures-and-goroutines-collide/ 匿名函数 在引入闭包之前我们需要先认识匿名函数。匿名函数与普通函数相同但它没有名称 , 因此称为“匿名函数”。相反匿名函数是动态创建的就像变量一样。 我们可以创建一个具有函数类型的变量然后就可以创建匿名函数并将其分配给变量。 // 声明函数类型变量var fun func() // 将匿名函数赋值给函数类型变量fun func() {fmt.Println(匿名函数) }// 调用函数fun() 匿名函数可以接受参数返回数据并执行普通函数可以执行的几乎任何其他操作. 闭包 闭包是一种特殊类型的匿名函数它引用在函数本身之外声明的变量是匿名函数与匿名函数所引用环境的组合 不仅仅是存储了一个函数的返回值它同时存储了一个闭包的状态。 闭包可以不传入外部参数仍然可以访问外部变量 这与常规函数引用全局变量的方式非常相似。你可能不会将这些变量作为参数直接传递到函数中但函数在调用时可以访问它们。 package mainimport fmtfunc main() {n : 0add : func() int {n 1return n}fmt.Println(add()) // 1fmt.Println(add()) // 2 }注意匿名函数可以访问变量 n但在调用时从未将其作为参数传入。这就是使它成为关闭的原因 闭包提供数据隔离 package mainimport fmtfunc main() {counter : newCounter()fmt.Println(counter()) // 1fmt.Println(counter()) // 2// fmt.Println(n) 报错 函数外无法访问闭包变量n 只有闭包函数才可以持续访问修改变量n } // 闭包作为函数返回值 func newCounter() func() int {n : 0return func() int {n 1return n} }在这个例子中闭包引用变量即使在函数完成运行之后也是如此。这意味着我们的闭包可以访问一个变量该变量跟踪它被调用了多少次但函数之外的其他代码无法访问该变量。这是闭包的众多好处之一 - 我们可以在函数调用之间持久化数据同时将数据与其他代码隔离。 并发闭包 package mainimport fmtfunc main() {for i : 0; i 10; i {fmt.Printf(%d , i)} } //结果很容易看到是 0 1 2 3 4 5 6 7 8 9但如果我们引入groutines并发运行结果可能会出乎你的意料 让代码并发执行最大效率地利用 CPU 格式runtime.GOMAXPROCS(逻辑CPU数量)这里的逻辑CPU数量可以有如下几种数值1不修改任何数值。1单核心执行。1多核并发执行。 一般情况下可以使用 runtime.NumCPU() 查询 CPU 数量并使用 runtime.GOMAXPROCS() 函数进行设置例如 runtime.GOMAXPROCS(runtime.NumCPU()) package mainimport (fmtruntimesync )func main() {// 让代码并发执行最大效率地利用 CPUruntime.GOMAXPROCS(runtime.NumCPU())var wg sync.WaitGroupfor i : 0; i 10; i {wg.Add(1)go func() {fmt.Printf(%d , i)wg.Done()}()}wg.Wait() }如果你同时思考那么你可能会预测输出将是数字 0 到 9 以某种随机顺序具体取决于 10 个 goroutines 的精确运行时间。 但输出实际上是 10 10 10 10 10 10 10 10 10 10为什么 为什么 因为每个 goroutines 的匿名函数 都在用每个 goroutines 生成的十个闭包之间共享单个变量 i。 goroutines 的输出将取决于它们何时开始运行的值。在上面的示例中直到循环终止并具有值 10 之前它们才真正开始运行。 这种现象的原因在于闭包共享外部的变量i注意到每次调用go就会启动一个goroutine这需要一定时间但是启动的goroutine与for循环变量递增的groutine不是在同一个goroutine可以把i认为处于主goroutine中。启动一个goroutine的速度远大于循环执行的速度所以即使是第一个goroutine刚起启动时外层的循环也执行到了最后一步了。由于所有的goroutine共享i而且这个i会在最后一个使用它的goroutine结束后被销毁所以最后的输出结果都是最后一步的i10。 总的来说就是 外层for循环执行遇到内层go,就启动协程然后循环1但是启动内层协程速度要慢于多个外层循环1。 可能等到最后一个循环1,第一个内层go协程才开始运行加上闭包影响每个协程并发执行但是访问的i都是同一个i,都是10. 在外层循环中增加延时效果进行验证 func main() {runtime.GOMAXPROCS(runtime.NumCPU())var wg sync.WaitGroupfor i : 0; i 10; i {wg.Add(1)go func() {fmt.Println(i)wg.Done()}()time.Sleep(1 * time.Second) // 每次外层for循环1就时间延时1秒// 每一步循环至少间隔一秒而这一秒的时间足够启动一个goroutine了// 这样我们就可以输出正确结果了}wg.Wait() } 解决方法 在实际的工程中不可能进行延时这样就没有并发的优势一般采取下面两种方法 共享的环境变量作为函数参数传递: func main() {runtime.GOMAXPROCS(runtime.NumCPU())var wg sync.WaitGroupfor i : 0; i 5; i {wg.Add(1)go func(i int) {fmt.Println(i)wg.Done()}(i)}wg.Wait() } /* 输出: 4 0 3 1 2 */ 输出结果不一定按照顺序这取决于每个goroutine的实际情况但是最后的结果是不变的。可以理解为函数参数的传递是瞬时的而且是在一个goroutine执行之前就完成所以此时执行的闭包存储了当前i的状态。 2.使用同名的变量保留当前的状态 func main() {runtime.GOMAXPROCS(runtime.NumCPU())var wg sync.WaitGroupfor i : 0; i 5; i {wg.Add(1)i : i // 注意这里的同名变量覆盖go func() {fmt.Println(i)wg.Done()}()}wg.Wait() } /* 输出结果 4 2 0 3 1 */ 同名的变量i作为内部的局部变量覆盖了原来循环中的i此时闭包中的变量不再是共享外循环的i而是都有各自的内部同名变量i赋值过程发生于循环过程中因此保证了独立。
http://www.hkea.cn/news/14307122/

相关文章:

  • 音视频网站建设可行性报告阜阳交通建设工程质监局网站
  • 网站建设询价文件app开发公司网站
  • 成都建网站手机网站开发屏幕尺寸一般是多少
  • 什么软件可以建网站长沙网页培训
  • 网站首页图片大全中国建筑集团有限公司简介
  • 泉州营销型网站建设修改wordpress上传图片地址
  • 东平网站制作哪家好织梦响应式网站怎么做
  • 移动端网站排名东莞营销专业网站建设
  • 网站内容收录酷站 网站
  • 园林公司网站模板代码运行框wordpress6
  • 专门做外贸网站有哪些网站后台组成
  • 做网站网址wordpress 卸载plugin
  • 焦作建设企业网站公司网站编辑属于什么行业
  • 用别人的资源做网站深圳网站建设方案维护
  • 安徽省港航建设投资集团网站网站开发 精品课程
  • 网站备案起名要求服务一流的做网站
  • 做网站交钱后以后还要教吗网站怎么进行网络推广
  • 如何把网站做跳转浏览器链接wordpress cdn图片加速
  • wordpress 站内信网站推广方式有哪些
  • 网站备案服务商导购网站免费推广
  • 阿里巴巴网站特色做网站用html还是python好
  • 厦门网站设计制作校园网站建设素材
  • 制作网站专业wordpress主题在线汉化插件下载
  • 网站有哪些昆明网站开发
  • 电子商务网站规划与建设深圳12个区排名
  • 活动策划公司网站网站推广软件app
  • 做著名建筑物网站简介企业黄页信息查询网
  • 网站建设哪家好服务集团网站建设的要求
  • 网站用什么格式的图片格式什么是网络营销举例子
  • 代码做网站网站整体架构