有人看过gomemcached吗,讨论一个并发结构问题

地址:https://github.com/dustin/gomemcached

支持并发编程语言一般做网络开发的模式应该是 one thread per connection,gomemcached也是这么做的,但我不明白的是为什么把处理请求业务逻辑的放到一个单独的thread里边,然后response再通过channel传递回connection thread, 为什么逻辑部分为什么不在connection thread 里做? memcached这种服务只需要互斥一下cache结构就行了,一个请求过来 recv -> handleMessage -> respond 这样顺序执行下来不挺好吗,而且没有像作者那样增加2次channel传递。

当然作者是go的开发者之-,也是memcached的作者,我想应该这样设计是有原因的,谁能帮忙解释一下?

共 2 个回复


David

这就是 Effective Go 里面说的:“Do not communicate by sharing memory; instead, share memory by communicating.” 两种编程模式

# 0

monnand

还有一点需要注意:goroutine不是thread。它是用户空间内调度的轻量的并发结构。我可以在我的笔记本上轻松创建几万个goroutine,但在上面跑几万个线程肯定会卡死。

# 1