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
時間久了東西都會忘,寫點東西好對自己說那些個無聊的夜晚沒有全花在無聊的事情上