如何做网站搬运工赚钱动画素材网站

张小明 2026/1/12 13:32:55
如何做网站搬运工赚钱,动画素材网站,幻灯片在什么网站做,深圳网络推广软件这篇文章 2014年3月13日发表#xff0c;作者 Sameer Ajmani 通过灵活的运用chan类型#xff0c;在 Go 中更高效的处理数据#xff0c;这里应用领域为健壮高效的流式数据处理#xff0c;并在安全性问题上做了补充#xff0c;例如程序异常、内存泄漏、Gc释放等 一些开源类库…这篇文章 2014年3月13日发表作者 Sameer Ajmani通过灵活的运用chan类型在 Go 中更高效的处理数据这里应用领域为健壮高效的流式数据处理并在安全性问题上做了补充例如程序异常、内存泄漏、Gc释放等一些开源类库也沿用了其思想例如MapReduces、并行处理等这篇博客要以MapReduces或者生产消费模型的思想去阅读博客开头的示例一个比较基础的管道使用将一组整数通过管道依次平方最终输出结果// 将要计算平方的数字依次添加到chan中并返回该只允许读的chan// 注意:该chan是无缓冲的gen函数运行完后内部的goroutine会依然运行直到处理完毕funcgen(nums...int)-chanint{out:make(chanint)gofunc(){for_,n:rangenums{out-n}close(out)}()returnout}// 从传入的只读chan中读取数据计算平方再返回chanfuncsq(in-chanint)-chanint{out:make(chanint)gofunc(){forn:rangein{out-n*n}close(out)}()returnout}funcTestExample(t*testing.T){// chan数据传输gen → sq → sq → 打印forn:rangesq(sq(gen(2,3))){t.Log(n)}}输出/Users/www/zero-core/mr/mr_test.go:39: 16 /Users/www/zero-core/mr/mr_test.go:39: 81过程中的一些说明gensq方法中分别创建了各自的 chan 变量用于写入数据并返回声明 chan 类型后要养成 close 的习惯close 后依然可以读有减缓 Gc 压力sq(sq(gen(2, 3)))中三个方法通过传入 chan 参数实现数据流转sq方法调用了两次gensq方法中的 chan 均为无缓冲通道互相调用时为阻塞模型也就意味着同一时刻只可能会有一段程序在执行(无论几核)这里就是使用 chan 类型实现了一个简陋的 MapReduces 过程并行处理官方着重提到的是并行但至于是否多核并行还是依赖于并发实现依旧是求平方的案例// 原始数据无阻塞写入 chan 注意这里返回的时候有缓冲的 chanfuncgen(nums...int)-chanint{out:make(chanint,len(nums))for_,n:rangenums{out-n}close(out)returnout}// 读取传入的 chan, 并计算平方, 写入 chanfuncsq(in-chanint)-chanint{out:make(chanint)gofunc(){forn:rangein{out-n*n}close(out)}()returnout}// 将传入的n个 chan ,用 n 个 goroutine 读取, 并将其写入到 out chan 中funcmerge(cs...-chanint)-chanint{varwg sync.WaitGroup out:make(chanint)// 读取传入的 chan, 并将其写入到 out chan 中output:func(c-chanint){deferwg.Done()forn:rangec{out-n}}wg.Add(len(cs))for_,c:rangecs{gooutput(c)}gofunc(){wg.Wait()close(out)}()returnout}funcTestExample(t*testing.T){// 将 2, 3, 4, 9 写入有缓冲的 chan返回的 chan 用 2 个 sq 方法去接收(2个消费者)in:gen(2,3,4,9)c1:sq(in)c2:sq(in)forn:rangemerge(c1,c2){// 输出 4 9 81 16顺序不定t.Log(n)}}输出/Users/www/zero-core/mr/mr_test.go:68: 4 /Users/www/zero-core/mr/mr_test.go:68: 9 /Users/www/zero-core/mr/mr_test.go:68: 81说明:c1、c2 相当于2个消费任务去执行通过内部创建的 goroutinue 去模型多线程多核并行merge 方法将多个传入的 chan 输出合并到一个 chan保证 Reduces 阶段只会有1个输出出口❌这里面有个不严谨漏洞当取数据不是采用 range 方式或者 chan 数据没有取完 chan 的发送方就会阻塞带取消功能的 chan对并行处理的代码改进在每个方法中都引入donefuncgen(done-chanstruct{},nums...int)-chanint{out:make(chanint)gofunc(){deferclose(out)for_,n:rangenums{select{caseout-n:case-done:return}}}()returnout}funcsq(done-chanstruct{},in-chanint)-chanint{out:make(chanint)gofunc(){deferclose(out)forn:rangein{select{caseout-n*n:case-done:return}}}()returnout}funcmerge(done-chanstruct{},cs...-chanint)-chanint{varwg sync.WaitGroup out:make(chanint)output:func(c-chanint){deferwg.Done()forn:rangec{select{caseout-n:case-done:return}}}wg.Add(len(cs))for_,c:rangecs{gooutput(c)}gofunc(){wg.Wait()close(out)}()returnout}funcTestExample(t*testing.T){done:make(chanstruct{})deferclose(done)// 保证所有 goroutine 收到取消信号in:gen(done,2,3,4,9)c1:sq(done,in)c2:sq(done,in)out:merge(done,c1,c2)// 只消费2个值就退出t.Log(-out)t.Log(-out)// 此时 done 被 defer 关闭所有 goroutine 安全退出}在每个方法中都加入了done内部使用select来监听是否关闭并return 释放协程如果chan没有取完通过 close 通知 done 的方式保证不会存在僵尸协程泄漏但这个案例还有改进的一步比如chan 中有3个值现在只取了1个就进行了 close 关闭chan 随是释放了但内部剩余的2个值可能会发生逃逸现象等待系统 Gc 释放如追求性能一种写法是 close 后通过手动读取释放来减缓 Gc 的压力// 不仅仅 close 还空读取deferfunc(){close(done)forrangeout{}}()额外注意的点在多任务消费读取生产数据时funcgen(nums...int)-chanint{out:make(chanint)gofunc(){for_,n:rangenums{out-n}close(out)}()returnout}funcgen2(nums...int)-chanint{out:make(chanint,len(nums))for_,n:rangenums{out-n}close(out)returnout}这两种方式实现过程结果一样不同之处在于将生产数据变快还是读取速度变快gen循序渐进的放入生产计划中gen2是一口气家在到生产计划中具体采用哪种适业务而定对官方这篇博客我的理解是每个使用了 chan 的地方应在适当的时候关闭且释放掉每个使用了 chan 的地方应持续从输入 channel 读取直到关闭或收到取消信号而不是一口气读一口气写不要完全依赖有缓冲的 chan 的 size 解决阻塞问题缓冲的大小是一个容错作用使用关闭的 channel 作为广播取消信号通知所有上游 goroutine 停止工作。使用 WaitGroup 时务必确保所有任务完成后再关闭输出 channel先 wait再 close原文出处 https://go.dev/blog/pipelines
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

哪些网站专做自媒体的做网站软件的公司

两极式三相光伏逆变并网仿真 ★前级为Boost变换器,采用mppt算法(扰动观察法)。 逆变器为三相两电平LCL型并网逆变器,采用SVPWM调制算法。 控制环路: ★除了直流电压环外,电流控制环采用双环PI调节,外环为并网电流环&am…

张小明 2026/1/10 23:17:44 网站建设

网站广告位图片更换没反应网站的建设属于无形资产

面对一份电商商品列表页的UI设计稿,字节跳动的一位前端工程师没有立刻开始编写HTML和CSS,而是将截图拖入了一个开发工具。90秒后,一份还原度超过95%、自带响应式布局与交互效果的代码已生成完毕。实战场景是检验AI编程软件价值的核心标准。本…

张小明 2026/1/10 16:12:12 网站建设

做招生网站企业名录查询器免费版

基于数据智能算法的小麦产量预测研究 1. 数据智能算法中的 GP 模型构建 在数据智能算法里,GP 模型的构建有一套特定流程: 1. 随机创建初始种群 :也就是随机生成计算机程序。 2. 执行具有最佳适应度值的程序 :挑选出适应度最优的程序来执行。 3. 生成新的计算机程…

张小明 2026/1/10 13:20:42 网站建设

昆明公司网站大型电子商务网站建设

python -m venv(Python 内置虚拟环境工具)和 conda create(Anaconda/Miniconda 环境管理工具)是创建虚拟环境的两种核心方式,核心差异在于定位、隔离范围、包管理体系、适用场景,以下是全方位对比&#xff…

张小明 2026/1/11 22:40:20 网站建设

寿县城乡建设局网站建设一个普通网站需要多少钱

第一章:Open-AutoGLM流程紊乱紧急应对概述当 Open-AutoGLM 系统在执行自动化推理任务时遭遇流程紊乱,可能导致任务阻塞、资源泄漏或输出异常。此类问题通常源于并发调度冲突、上下文状态丢失或模型调用链断裂。为保障系统稳定性,需建立快速识…

张小明 2026/1/11 14:13:17 网站建设

模板网站建站网站建设借鉴

IsaacLab机器人手自碰撞检测完整指南:从入门到实战 【免费下载链接】IsaacLab Unified framework for robot learning built on NVIDIA Isaac Sim 项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab 在机器人仿真领域,精确的自碰撞检测…

张小明 2026/1/12 4:38:44 网站建设