1 SuperFashi 2017-01-31 14:55:01 +08:00 via Android 用途? |
![]() | 2 Valyrian 2017-01-31 14:58:43 +08:00 以前用 golang 作业写过类似的东西。。 |
![]() | 3 Siril OP |
![]() | 4 ovear 2017-01-31 15:09:53 +08:00 这个不是直接封装 chan 就好了么 一个分发 chan ,一个 slice ,多个处理 chan 分发 chan 里面直接循环往 slice 的 chan 塞东西就好了。。有啥问题么? |
![]() | 5 jarlyyn 2017-01-31 15:14:02 +08:00 via Android 没看懂用途 |
![]() | 6 jarlyyn 2017-01-31 15:16:20 +08:00 via Android |
7 buckethead1 2017-01-31 15:30:30 +08:00 就是 pub/sub 么... |
![]() | 8 Siril OP @jarlyyn 对,就是一个 go routine 负责从外部读取一些东西塞 chan , 其他一组 go routine 需要取 chan , 这组 go routine 随时有新增和退出。 如果不用 mutex 。。。 |
9 lecher 2017-01-31 15:53:17 +08:00 via Android 生产者和消费者模型,七牛的公开技术文档经常提到这个设计模式在内部项目的应用场景。 |
![]() | 10 wweir 2017-01-31 15:59:47 +08:00 via Android chan 的 close 信号是广播的 |
![]() | 11 Siril OP @ovear 我似乎理解你说的意思,就是元素为 chan 的 slice 。 一开始就是这么弄的, 然后发现 2 个问题: 新开的 goroutine 需要获取一个 chan 用来收消息; 一个收消息的 goroutine 可能随时退出,然后这个 slice 大小只增不减。 |
![]() | 12 ovear 2017-01-31 17:22:53 +08:00 |
13 SuperFashi 2017-01-31 18:16:12 +08:00 |
14 nareix 2017-02-01 09:37:59 +08:00 sync.Cond |
![]() | 15 codehz 2017-03-20 17:53:37 +08:00 我记得反射就可以了。。。性能应该会比用链式结构的好吧 `reflect.Select`可以接收一个数组 |