1. 异步的做法在error handling那边会比较疼的,
同步的做法出错了处理下就好了,Go语言的goroutine层的阻塞也不会让底层阻塞。但是到了异步,Actor把消息丢给另一个Actor去执行,后面可能出错,而错误信息的反馈就比较麻烦了。
如果你要等结果出来,就又回到了同步时代。
如果你不等执行结果,继续往下走,那出错了能回滚么?
2. socket处理完全封装, 只通过channel
虽然看上去很美,性能上还是有缺陷的。
每个连接会开两个goroutine,中间还有channel数据传递引入的开销。
相比于epoll加回调,多执行了很多东西。goroutine is cheap,but not free
3. 逻辑复杂以后,数据的归属难以处理
Actor必然涉及到大量的消息交换。而为了效率这个肯定不是深拷贝数据的。既然还有内存共享,后面也不是一个很舒心的事情。模型出发点是不要处理低层的锁相关,但还是不得不面临这些问题。
4. 一些带执行顺序的逻辑以及死锁问题
有些会有启动顺序或者服务依赖之类,这是用Actor模型做的时候很烦的东西。另外一个是有这种情况时,特别要注意成环死锁。
....先说这些吧。同楼主一样思考过这些东西,也踩过一些坑....
都在探索,多交流。
re: 开始记录编程方面的技巧[未登录] Arthur 2012-07-19 10:39
时间久了东西都会忘,写点东西好对自己说那些个无聊的夜晚没有全花在无聊的事情上