[Go 语言]第一次用大量的并发逻辑写程序 有点烧脑

2015-08-31 08:47:08 +08:00
 ljbha007

昨天学习了一下 Go 语言 发现 Go 的强大之处
最后做官网的 go tour 给的最后一道练习题时 被并发逻辑搞得很头疼 脑子有点转不过来
以前用 Java 也经常写线程同步的东西 但是没有到“每个函数调用都用并发”的程度
再加上递归的逻辑 顿时脑袋有点要爆炸的感觉
还好最后还是绕出来了
贴一个我自己的实现的代码

根据我的经验这种问题应该是编程思想还没有转变 转变之后应该就不会那么烧脑了 各位 V 友有没有那么觉得?

3563 次点击
所在节点    Go 编程语言
38 条回复
ljbha007
2015-08-31 14:27:37 +08:00
@akira
@hxtheone
@JungleHi

前台页面都写完了
数据库表结构也弄好了
基本的页面数据展示、过滤、排序这些都弄完了
前端 js/css/html 也写完了
后台简单做了一个插入商品条目的页面其他没做
基本也就只有后台管理页面没弄完了
后来客户那边天天催着要录数据
还有个做 vi 的天天拿些高大上的页面叫我整站页面照着那个风格重做(但是客户自己并没有这么要求)
后来搞得我很烦 不想做了
但是无论怎么说答应的事情没做完 确实是我的错
pythonee
2015-08-31 15:24:35 +08:00
什么叫
每个函数调用都用并发
pythonee
2015-08-31 15:24:50 +08:00
@shadowind 赐教下,没看懂
xiaoyao9184
2015-08-31 15:27:57 +08:00
每个函数都是异步吧
ljbha007
2015-08-31 15:27:59 +08:00
@pythonee
每个 Crawl 函数前面都加了 go 说明是在额外线程中执行的

我是这样 每个 Crawl 函数都自己建一个 channel 然后每有一个需要爬的 url 就 再开个线程递归调用自己 然后把函数内部的 channel 传给子线程 然后自己就一直阻塞直到 从自线程的 channel 里传来的消息数量等于开启的子线程数量时 再退出线程
ljbha007
2015-08-31 15:28:16 +08:00
@xiaoyao9184 是的
passluo
2015-08-31 15:35:17 +08:00
@ForgotFun
@yaoyao1158
@u926262
@hxtheone



当时楼主还小,好像还在读大学,也是朋友介绍的,事实和楼主说的差不了太多(除了什么 XX 要改页面但是其实顾客没有要求之类的……)。

结局是最后项目黄了,包工头自己赔了几万块钱……
ljbha007
2015-08-31 15:40:59 +08:00
@passluo

吴迪自己赔钱了吗?我不知道这个事啊 我以为你们接着弄完了
实在是对不住啊
ljbha007
2015-08-31 15:41:38 +08:00
@passluo
那段时间我自己心理也有些问题 比较消沉 所以工作状态非常不好
passluo
2015-08-31 15:43:24 +08:00
工资是他垫付的,因为没做完,所以那边也没给他结账。

不过,都过去了,小事儿。
liboyue
2015-08-31 16:13:51 +08:00
@passluo 另开个贴讲讲嘛蛤蛤蛤
wudikua
2015-08-31 19:16:29 +08:00
@passluo 世界真小
Phariel
2015-08-31 19:23:43 +08:00
门口出售瓜子花生矿泉水,啤酒饮料八宝粥了啊。
期待进入 V2EX 撕逼精华 https://github.com/greatghoul/sibi
_(:з」∠)_
Ouyangan
2015-08-31 21:07:43 +08:00
哈哈 , 你们能和气的讲话就好
yaotian
2015-09-01 12:37:29 +08:00
@passluo 一个人退出,就把整个项目搞黄了?
feuvan
2015-09-01 15:07:18 +08:00
翻了翻代码,又类似的 pattern
done := make (chan bool, 1 )
go func () {

done <- true
}()
go func () {

done <- true
}()
for n := 0; n < 2; n++ {
<-done
}
ljbha007
2015-09-01 15:40:33 +08:00
@yaotian 因为当时就我一个人在搞啊 他们设计都做好了
heimirror
2015-09-18 12:55:24 +08:00
吴迪这个名字很熟悉

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX