昨天学习了一下 Go 语言 发现 Go 的强大之处
最后做官网的 go tour 给的最后一道练习题时 被并发逻辑搞得很头疼 脑子有点转不过来
以前用 Java 也经常写线程同步的东西 但是没有到“每个函数调用都用并发”的程度
再加上递归的逻辑 顿时脑袋有点要爆炸的感觉
还好最后还是绕出来了
贴一个我自己的实现的代码
根据我的经验这种问题应该是编程思想还没有转变 转变之后应该就不会那么烧脑了 各位 V 友有没有那么觉得?
昨天学习了一下 Go 语言 发现 Go 的强大之处
最后做官网的 go tour 给的最后一道练习题时 被并发逻辑搞得很头疼 脑子有点转不过来
以前用 Java 也经常写线程同步的东西 但是没有到“每个函数调用都用并发”的程度
再加上递归的逻辑 顿时脑袋有点要爆炸的感觉
还好最后还是绕出来了
贴一个我自己的实现的代码
根据我的经验这种问题应该是编程思想还没有转变 转变之后应该就不会那么烧脑了 各位 V 友有没有那么觉得?
|
1
|
|
DebugsAug 31, 2015 via Android
2
没用过
|
|
starAshAug 31, 2015
3
写的都很费劲,别提读了
|
|
shadowindAug 31, 2015
4
使用 goroutine 和 channel 玩递归,有意思啊~
|
|
scysAug 31, 2015
5
看着 Gist 一行行出来
|
|
hanwujibabyAug 31, 2015
6
用的 go 的哪个版本?
|
|
passluoAug 31, 2015
7
话说你是之前做外包坑我们的那个么 =。=
看头像很像啊…… |
|
yqf3139Aug 31, 2015
8
这样递归太费资源了吧, chan 做 url 的队列,起定数的 goroute 就行了
|
|
10
@hanwujibaby
官网的教程里的 不知道版本 |
|
yaoyao1158Aug 31, 2015
12
@passluo 前来围观……
|
|
14
@ljbha007 可以传递自定义的结构体的,不过这样的话可能 chan 的缓冲到极限后,可能会都死在向 chan 推的动作中.极限要取大点,或者再自己弄个队列.
|
|
0987363Aug 31, 2015
15
为嘛不用 chan 来传,简单省事,一端写 url ,一端大量 goroutine 池,一个 chan 太慢就多开几个,简单省事
|
|
17
|
|
JungleHiAug 31, 2015
20
我们公司之前也有个项目外包 http://v2ex.com/t/155956 V2EX 上没有合适的 老板后来叫他朋友做 然后... 现在不知道他们还是不是朋友了
|
|
21
|
|
pythoneeAug 31, 2015
22
什么叫
每个函数调用都用并发 |
|
xiaoyao9184Aug 31, 2015 via Android
24
每个函数都是异步吧
|
|
25
@pythonee
每个 Crawl 函数前面都加了 go 说明是在额外线程中执行的 我是这样 每个 Crawl 函数都自己建一个 channel 然后每有一个需要爬的 url 就 再开个线程递归调用自己 然后把函数内部的 channel 传给子线程 然后自己就一直阻塞直到 从自线程的 channel 里传来的消息数量等于开启的子线程数量时 再退出线程 |
|
26
@xiaoyao9184 是的
|
|
passluoAug 31, 2015
27
@ForgotFun
@yaoyao1158 @u926262 @hxtheone 当时楼主还小,好像还在读大学,也是朋友介绍的,事实和楼主说的差不了太多(除了什么 XX 要改页面但是其实顾客没有要求之类的……)。 结局是最后项目黄了,包工头自己赔了几万块钱…… |
|
passluoAug 31, 2015
30
工资是他垫付的,因为没做完,所以那边也没给他结账。
不过,都过去了,小事儿。 |
|
PharielAug 31, 2015
33
|
|
OuyanganAug 31, 2015
34
哈哈 , 你们能和气的讲话就好
|
|
36
翻了翻代码,又类似的 pattern
done := make (chan bool, 1 ) go func () { 略 done <- true }() go func () { 略 done <- true }() for n := 0; n < 2; n++ { <-done } |
|
heimirrorSep 18, 2015
38
吴迪这个名字很熟悉
|