前言: 本文承接自上篇:iOS即時(shí)通訊進(jìn)階 - CocoaAsyncSocket源碼解析(Connect篇) 注:文中涉及代碼比較多,建議大家結(jié)合源碼一起閱讀比較容易能加深理...
前言: 本文承接自上篇:iOS即時(shí)通訊進(jìn)階 - CocoaAsyncSocket源碼解析(Connect篇) 注:文中涉及代碼比較多,建議大家結(jié)合源碼一起閱讀比較容易能加深理...
@李鼎
在五一前最后一天工作日早上摸魚之際看到簡書消息,受到您的認(rèn)可,我個(gè)人是很開心的,關(guān)于您的邀請我思索了一下還是決定拒絕,原因大概有下面幾點(diǎn)
1. 又再看了一些源碼,發(fā)現(xiàn)已經(jīng)提供了TtlExecutors與相關(guān)ExecutorService實(shí)現(xiàn)線程池包裝,其中由于subit(Runnable)每次都會(huì)包裝新的TtlRunnable對象,會(huì)出發(fā)即時(shí)的現(xiàn)場數(shù)據(jù)抓取,因此前面提到的功能思考在部分使用用法中已經(jīng)conver了,那么剩余問題就變成了對于重復(fù)使用的TtlRunnable如何處理,那么也很簡單,在構(gòu)造函數(shù)中提供外部可管理的 new AtomRerence(capture)就好,比如在構(gòu)造函數(shù)中加參數(shù)??傊A(yù)想中實(shí)現(xiàn)并不復(fù)雜,但問題應(yīng)該不會(huì)這樣簡單,基礎(chǔ)庫應(yīng)該考慮到使用者的心智負(fù)擔(dān)和兼容性,如果貿(mào)然提供與之前使用邏輯不一致的能力,很可能引發(fā)誤用,導(dǎo)致口碑下滑,由于目前對線程池包裝對重新生成TtlRunnable對象做組織,是直接復(fù)用該對象的,如果貿(mào)然更改可能導(dǎo)致歷史使用用法中ThreadLocal數(shù)據(jù)發(fā)生與預(yù)期不一致的變化,比如有些人在另一個(gè)與創(chuàng)建TtlRunnable時(shí)無關(guān)的子線程去submit,此時(shí)數(shù)據(jù)一定會(huì)變化,這樣就可能造成人家業(yè)務(wù)方功能異常??傊绾渭嫒菔莻€(gè)問題,需要耗費(fèi)想法去思考解決
2. 在分析問題后,為啥我不愿意行動(dòng)呢,原因可能比較奇葩,我本人的背景并不是java服務(wù),坦白講對于您這個(gè)庫的核心使用場景我是缺乏具體體會(huì)的,前面提到的使用場景兼容性問題我預(yù)計(jì)就會(huì)有些思路門檻。另外,我個(gè)人對于這個(gè)庫總共也就看了個(gè)把小時(shí),看的過程目標(biāo)也只是分析主干內(nèi)容學(xué)習(xí)精髓,目前還沒有深入該庫的打算,作為android開發(fā)背景,在我的認(rèn)知中這個(gè)庫的使用場景確實(shí)有限,對于我應(yīng)該不值得投入過量的精力。最主要的還是我近期是在做系統(tǒng)性的知識(shí)復(fù)習(xí),本身缺乏時(shí)間,五一也有其他安排,因此對于您的好意我目前只能表示抱歉
感謝您的贊賞,我本人也非常開心能與開源作者進(jìn)行溝通
TransmittableThreadLocal詳解1、簡介 TransmittableThreadLocal 是Alibaba開源的、用于解決 “在使用線程池等會(huì)緩存線程的組件情況下傳遞ThreadLocal” 問題的 In...
另外個(gè)人覺得,在構(gòu)造ttlrunnable對象的時(shí)候就收集現(xiàn)場數(shù)據(jù)時(shí)機(jī)有點(diǎn)早,應(yīng)該還是submit的時(shí)候收集數(shù)據(jù)最好。runnable可能有復(fù)用場景,tl.set方法按理說在submit前面用應(yīng)該比較常見。(當(dāng)然我并不是站在適配現(xiàn)有工程實(shí)現(xiàn)的角度,硬要說的話,字節(jié)碼操作也能換掉)
TransmittableThreadLocal詳解1、簡介 TransmittableThreadLocal 是Alibaba開源的、用于解決 “在使用線程池等會(huì)緩存線程的組件情況下傳遞ThreadLocal” 問題的 In...
我倒是覺得精髓在AtomReference保存thread內(nèi)的threadlocalmap中部分?jǐn)?shù)據(jù)作為現(xiàn)場快照這里。holder只是一個(gè)當(dāng)前線程中threadlocalmap部分key的保存容器,源碼里還有從register里自定義的threadlocal可注冊,他本質(zhì)上是在決定需要抓取哪些現(xiàn)場數(shù)據(jù),只是實(shí)現(xiàn)方式是通過了一個(gè)全局的inherentthreadlocal作為收納threadlocalmap key的容器,實(shí)現(xiàn)了在set數(shù)據(jù)時(shí)自動(dòng)登記,從而避免手動(dòng)關(guān)聯(lián)(例如避免了構(gòu)造ttlrunable時(shí)主動(dòng)將關(guān)心的ttl對象綁定到上面),這是一個(gè)優(yōu)雅實(shí)現(xiàn),但核心還在是在跨線程分享快照數(shù)據(jù)這里,只有能跨線程保存數(shù)據(jù),才能重新布置現(xiàn)場并恢復(fù)現(xiàn)場
TransmittableThreadLocal詳解1、簡介 TransmittableThreadLocal 是Alibaba開源的、用于解決 “在使用線程池等會(huì)緩存線程的組件情況下傳遞ThreadLocal” 問題的 In...
要使用 HttpURLConnection,最好對一些基礎(chǔ)概念有所認(rèn)識(shí),比如 TCP/IP 協(xié)議,HTTP 報(bào)文, Socket 等。先談一些我的認(rèn)識(shí),有可能不完全正確: S...
一個(gè)是Callback中的handleMessage,一個(gè)是Handler中的handleMessage,肯定調(diào)用不到啊
https://www.cnblogs.com/FireCuckoo/p/7826615.html
https://blog.csdn.net/sinat_35512245/article/details/55051306