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