1. 異步的做法在error handling那邊會比較疼的,
同步的做法出錯了處理下就好了,Go語言的goroutine層的阻塞也不會讓底層阻塞。但是到了異步,Actor把消息丟給另一個Actor去執(zhí)行,后面可能出錯,而錯誤信息的反饋就比較麻煩了。
如果你要等結(jié)果出來,就又回到了同步時代。
如果你不等執(zhí)行結(jié)果,繼續(xù)往下走,那出錯了能回滾么?
2. socket處理完全封裝, 只通過channel
雖然看上去很美,性能上還是有缺陷的。
每個連接會開兩個goroutine,中間還有channel數(shù)據(jù)傳遞引入的開銷。
相比于epoll加回調(diào),多執(zhí)行了很多東西。goroutine is cheap,but not free
3. 邏輯復(fù)雜以后,數(shù)據(jù)的歸屬難以處理
Actor必然涉及到大量的消息交換。而為了效率這個肯定不是深拷貝數(shù)據(jù)的。既然還有內(nèi)存共享,后面也不是一個很舒心的事情。模型出發(fā)點是不要處理低層的鎖相關(guān),但還是不得不面臨這些問題。
4. 一些帶執(zhí)行順序的邏輯以及死鎖問題
有些會有啟動順序或者服務(wù)依賴之類,這是用Actor模型做的時候很煩的東西。另外一個是有這種情況時,特別要注意成環(huán)死鎖。
....先說這些吧。同樓主一樣思考過這些東西,也踩過一些坑....
都在探索,多交流。
re: 開始記錄編程方面的技巧[未登錄] Arthur 2012-07-19 10:39
時間久了東西都會忘,寫點東西好對自己說那些個無聊的夜晚沒有全花在無聊的事情上