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