为了账号安全,请及时绑定邮箱和手机立即绑定

搭建并行处理管道,感受GO语言魅力

难度中级
时长 2小时17分
学习人数
综合评分9.67
51人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.6 逻辑清晰

最新回答 / Liu_HongYe
哦,我懂了,在InMemSort中, 数据没有处理完, chan是没有close的, 那么这个chan就会阻塞掉, 一直不会把监听的数据准备好.

最新回答 / Liu_HongYe
for循环执行时需要时间的, 在for循环未执行完成之前, 前面go语句生成的goroutine就已经执行了, 所以会有一部分的输出出现.

最赞回答 / 慕粉329807310
11分45秒的时候老师解释了,createPipeline只是创建了pipeline,也就是把一个文件分成了chunkCount个小快,各放上了一个channel,但是此时channel还是阻塞的,因为要等触发了ReadSource以后才这些通道才会开始不断传输。因此在CreatePipeline里面是不能file.close的,需要把这些file句柄返回出来,由外面close。老师说因为不想把这个示例搞的太复杂,所以就留下了这个坑。

最新回答 / tokumi
defer的效果是从最后向前依次执行需要defer的语句,也就说需要defer操作的引用都会被存储在一个栈空间。在栈空间里file指向的地址还是不同的地址,因此可以解决这个问题。猜测是这样,并没有实际证据。

最赞回答 / haoyun666
只有一个ready,那么第二个在读取的时候会一直被等待呀,等到能读取。如果其中一个读数据不ok,那么证明已经关闭了数据读取完了,这是就拍另一个就行了。所以没有问题。

最新回答 / 慕先生0298200
因为in只进不出,所以加<-限制,不然in就可以进出。同理返回值。不加也可以,加了代码比较严谨。

最新回答 / strondy
不同keymap风格,自动补全的shortcut key不一样。preference->keymap->Main menu->Refactor->Extract->Variable,就能看到具体是啥快捷键

已采纳回答 / 姬月弦
一台机器放不开数据了,就放在好几台机器上弄,视频只是为了演示分布式效果吧

最赞回答 / 晓之海绵宝宝
经过测试找到问题了,原文中用<...code...>这种写法,在 for 循环到最后, ch 没有数据时,程序死锁。

最新回答 / openset
改成这样就可以了:<...图片...>

最赞回答 / 张金富
抱歉 我好像理解了 tcp部分已经通过io接口做完了 剩下的都是一个进程里的 所以可以用channel

已采纳回答 / 张金富
老师讲了 可能出错了 但是还读到了几个字节 不能扔掉

最赞回答 / 白聪聪
需要在你的GOPATH路径下创建个src目录,然后把项目创建在这个src目录下,就可以自动导入自定义的包了

最赞回答 / VANCY
macos先按Command+`,` 在自定义快捷(keymap)里搜索 Variable (在Refactor->Extract下面)
课程须知
1、了解一门编程语言,对基本算法如排序有了解
老师告诉你能学到什么?
1、go语言的历史和设计初衷 2、go语言的安装与开发环境 3、简单的go语言程序 4、了解go语言并发编程 5、实现一个并行数据处理管道

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消