【Jcell】雙T機(jī)制
備份標(biāo)記:Jcell 2023、Jcell 2024pre、外包策略、勞務(wù)派遣、細(xì)胞控制、情緒控制、情感偽裝和加工等。 備份時間:20230807; 【銜接位置】與前后內(nèi)容的鏈接: 上一個:情緒控制系統(tǒng)。 下一個:水庫結(jié)構(gòu)與情緒緩沖機(jī)制。
【雙T機(jī)制】雙線程并行機(jī)制,是指對于一個非空流程,由兩個線程對該流程負(fù)責(zé),其中一個線程負(fù)責(zé)該流程的執(zhí)行,另外一個線程對執(zhí)行該流程的線程進(jìn)行監(jiān)督。 執(zhí)行流程的線程稱作「執(zhí)行者線程」,監(jiān)督執(zhí)行者的線程為「監(jiān)督者線程」。監(jiān)督者與執(zhí)行者可隨時互換,稱作「輪班」,在一個執(zhí)行者、一個監(jiān)督者,共兩線程的輪班機(jī)制下,又叫做「雙T輪替」。 記線程T1、T2,給定任務(wù)的流程,其中T1負(fù)責(zé)流程的執(zhí)行,T2負(fù)責(zé)監(jiān)督T1,原子化參數(shù)控制為t,其中流程執(zhí)行過程為P,監(jiān)督過程為Q T1=()→P(t) T2=()→Q(T1, t) 利用科里化,合并線程lambda表達(dá)式得到 T2=()→Q(P(t),t) 這是嵌套函數(shù)QP,但我不喜歡嵌套太多層,因此使用「合理委托策略」,把任務(wù)交給專業(yè)性更強(qiáng)的外包執(zhí)行,因此合理委托策略又稱「外包策略」或「勞動派遣策略」。 監(jiān)督者線程的函數(shù)式接口(Runnable)方法run()內(nèi)為線程操作(控制執(zhí)行者線程的線程),執(zhí)行者線程的函數(shù)式接口方法run()內(nèi)為任務(wù)操作(如多線程下載、并發(fā)記憶等)。 用偽代碼表示如下: 監(jiān)督者.run(){ //控制條件 執(zhí)行者.run(){ //執(zhí)行任務(wù) } } 這是二級嵌套委托模型,可理解為監(jiān)督者把任務(wù)委托給執(zhí)行者去做。 【輪T機(jī)制與勞動派遣】事實(shí)上,可能有三線程、四線程,其中對于三T機(jī)制(三權(quán)分立),可以有兩個監(jiān)督者、一個執(zhí)行者,或一個監(jiān)督者、兩個執(zhí)行者。 對于外包策略,監(jiān)督者把任務(wù)外包給執(zhí)行者,為了避免「職業(yè)歧視」的現(xiàn)象出現(xiàn),可以使用兩種子策略——強(qiáng)外包策略和弱外包策略。 強(qiáng)外包策略是指(說白了就是壟斷策略):由高層壟斷并下發(fā)權(quán)利,以專業(yè)度為高優(yōu)先級,專業(yè)等級由高層評定,且要求極為嚴(yán)格,標(biāo)準(zhǔn)統(tǒng)一,想要被外包或勞務(wù)派遣,自身必須有極強(qiáng)的專業(yè)性才能領(lǐng)到任務(wù)。 弱外包策略是指(說白了就是競爭策略):底層自發(fā)競爭,發(fā)揮市場的主觀能動性和自我調(diào)節(jié)優(yōu)勢,減輕高層壓力,專業(yè)性可能欠佳,但適用性更強(qiáng),且流通性更高。 在實(shí)際應(yīng)用中強(qiáng)弱外包并發(fā)使用,借助「超級多態(tài)」,專業(yè)度更高的執(zhí)行者可以更大幾率領(lǐng)到任務(wù)。 常見的外包有:下載器(Downloader)、加工器(Consumer)、生產(chǎn)器(Producer)、分解器(Deconsumer)、記錄器(Recorder)、記憶器(Memorial)等…… 壟斷策略使外包更具專業(yè)性,由監(jiān)督者限定每一類有且只有一個外包,但要求專業(yè)性,每一類同時只能有一個執(zhí)行者領(lǐng)取到,且同類任務(wù)的所有執(zhí)行者被認(rèn)為是「合作關(guān)系」而非競爭,所領(lǐng)取的獎勵量由任務(wù)完成度、完成效率、滿意度等綜合評判,它們之間只要存在競爭,就會在一定程度上影響到任務(wù)的執(zhí)行完整度,這會讓總獎勵下降。 競爭策略使外包更具多樣性,監(jiān)督者有更多執(zhí)行者可以選擇,但任務(wù)完成專業(yè)度可能不受監(jiān)督者信任,或者說監(jiān)督者委托出去的任務(wù),競爭策略影響下的執(zhí)行者不一定完成的很好,為了爭搶任務(wù),執(zhí)行者之間很可能會出現(xiàn)惡意競爭或欺騙現(xiàn)象,稱作「內(nèi)卷」。 不需要擔(dān)心壟斷策略因?yàn)閳?zhí)行者領(lǐng)夠獎勵而擺爛的現(xiàn)象,因?yàn)槿蝿?wù)的完成過程十分輕松且簡單,所有的便利和專業(yè)化培訓(xùn)均由監(jiān)督者免費(fèi)提供,包括算法調(diào)用、運(yùn)行時優(yōu)化和結(jié)構(gòu)化重排(參見Jcell 2020「結(jié)構(gòu)化時序分析與快排時鐘邏輯」)。這可以類比,一群外包工來到快遞分揀站干活,他們作為執(zhí)行者,不需要考慮客觀因素(如水分、伙食、勞累、工資),他們只需要保證快件完好、分類準(zhǔn)確率和輕拿輕放。面對大件拿不動,監(jiān)督者有機(jī)器,吊車、重型吊車、超重型吊車、叉車免費(fèi)提供+培訓(xùn),伙食包給五星級大廚,合理的工作制度、工資分配、醫(yī)療制度甚至心理輔導(dǎo),讓外包們盡可能輕松地完成工作。 不需要擔(dān)心競爭策略會出現(xiàn)高層塌陷、資金周轉(zhuǎn)異常、負(fù)載過高等情況。競爭策略是高層的監(jiān)督者為了減輕壓力讓執(zhí)行者利用「線程競爭機(jī)制」(參考Java、Jcell編譯手冊第25章第7節(jié)「線程自殺機(jī)制」),自己去卷專業(yè)度,這避免了在壟斷策略內(nèi)發(fā)生的現(xiàn)象,當(dāng)高層被外界動蕩局勢打擾時,無法分配足夠的功率去壟斷外包,造成形式化外包和應(yīng)試外包的情況。但意味著有更危險的定時炸彈埋在其中,當(dāng)線程爭搶不過資源時,線程會通過「凋亡」來終結(jié)自己,最終(被)凋亡的線程會被線程池回收再利用。 情緒控制系統(tǒng)可以提供沖擊預(yù)案以應(yīng)對這些潛在問題(如高層塌陷)。 【權(quán)能交換】執(zhí)行者與監(jiān)督者可以交換權(quán)利,使執(zhí)行者變?yōu)楸O(jiān)督者,監(jiān)督者變?yōu)閳?zhí)行者,這個過程稱作「權(quán)能的交換」。 交換的前提是,執(zhí)行者的專業(yè)度足夠高,且權(quán)重占比達(dá)到標(biāo)準(zhǔn)。 【內(nèi)卷】在線程競爭過程中,線程之間不合理地爭搶腦區(qū)資源,導(dǎo)致腦區(qū)超負(fù)載的現(xiàn)象,稱作線程的「內(nèi)卷」。 【凋亡】在線程競爭過程中,因線程獲取不到執(zhí)行機(jī)會,主動放棄Runnable執(zhí)行的現(xiàn)象,稱作線程的凋亡。 與線程的死亡不同,線程的凋亡通常是線程自身的時空等因素不足以支撐Runnable接口方法體的執(zhí)行而引起的任務(wù)放棄現(xiàn)象。 例如當(dāng)一個Runnable方法體內(nèi)迭代次數(shù)過多導(dǎo)致棧溢出,那么在使用線程池創(chuàng)建線程時,這個Runnable任務(wù)起初將會有一個線程領(lǐng)取并完整執(zhí)行,該執(zhí)行者線程發(fā)現(xiàn),自己無法成功且完整地利用現(xiàn)有資源完成該任務(wù),因此選擇放棄,轉(zhuǎn)而選擇其它任務(wù)。 當(dāng)一個執(zhí)行者線程具備的專業(yè)度為α,而無法成功執(zhí)行Runnable任務(wù)時,那么所有專業(yè)度低于或等于α的執(zhí)行者均會放棄該Runnable任務(wù)(打上標(biāo)記)。 這里我認(rèn)為,監(jiān)督者線程是線程池內(nèi)所有的已知線程生成元中,專業(yè)度最高的,而當(dāng)監(jiān)督者線程也無法執(zhí)行該Runnable任務(wù)時,線程池拋出異常并層層向上反饋給組織級、器官級系統(tǒng)級和個體級。 【專業(yè)度】一個線程執(zhí)行并完成任務(wù)的效能、效率、功耗、質(zhì)量的綜合評估因素,稱作線程的專業(yè)度,一個更專業(yè)的線程意為擁有更好的任務(wù)執(zhí)行能力。 和「專業(yè)性」不同,專業(yè)度是衡量線程對某件任務(wù)執(zhí)行好壞的一種評估。專業(yè)性則是指線程在不同任務(wù)上不同專業(yè)度的分布,內(nèi)向的線程結(jié)構(gòu)并不適合人際交流,外向的線程結(jié)構(gòu)坐不住(參見Jcell 2018 第7章「線程」第47節(jié)「線程的方向」) 【線程生成元】一群線程內(nèi)的每個線程,總能找到與之等效的、由該線程群的子群乘積所組成的聯(lián)合線程。 已知線程池分配了群T,包含了T1、T2、T3、……存在任務(wù)R交給T[i]執(zhí)行,同樣的,線程池也可以指派線程群的子群,由這些線程們合作解決任務(wù)R,能得到相同的結(jié)果,對于任意索引 i ,T[i]總能找到一個T的子群能夠替代之,這個子群稱作群T的生成元。 生成元的存在可以減少群的成員數(shù)量,類似于「裁員」,可理解為減少一個工作單位的員工數(shù)量,但這意味著員工需要進(jìn)行更多的步驟(例如員工需要進(jìn)行更多的交流合作、負(fù)擔(dān)增加)。 數(shù)學(xué)中存在一個例子,定義 D3={A, B, C, D, E, F} 其中E為恒元,D、F為繞等邊三角形中點(diǎn)逆時針旋轉(zhuǎn)2π/3和4π/3,A、B、C為繞三個對稱軸的翻轉(zhuǎn)。其中,可取生成元為{D, A},則有變換(乘積) E=D3=A2 F=D2 B=AD C=DA 也可取生成元為{F, A},則有 E=F3=A2 D=F2 B=FA C=AF 生成元的數(shù)目為有限群的秩。 在上述例子中,群D3的生成元為子群{D, A}或{F, A},可以用這兩個元素的變換「平替」掉其余不需要的元素,但這樣就需要對DA組合或FA組合進(jìn)行變換,增加工作時長或加班。 工作單位可以視作一個巨型群,群元為每個員工,當(dāng)公司裁員時,將保留的員工視作生成元,對他們進(jìn)行額外的線性變換,交給他們額外的工作,剩下的人全部被裁。 假設(shè)生成元的長度為m,員工數(shù)量為N,那么被裁員工數(shù)量為N-m,這N-m人將會失業(yè)、露宿街頭或空窗期等待下一份工作,但不可否認(rèn)的是,他們失業(yè)了。而作為生成元的員工,則需要承擔(dān)更大的壓力和負(fù)擔(dān)。 這其中唯一不變的是,公司的效益。當(dāng)然可以通過保持對這m人的薪酬不變(不給加班費(fèi)),即使他們?yōu)榱送瓿扇蝿?wù)需要加班,這會使公司收益提升(減少開支),但生成元的壓力會增大。 當(dāng)保證公司效益不變時,這相當(dāng)于原來頒發(fā)給N-m個人的總薪水平均到m人的加班費(fèi)。 上述「裁員-加班-失業(yè)」的過程稱作「生成元的平替」(即「你不干有的是人干」)。 同理,我將線程池內(nèi)所有已創(chuàng)建的線程視為線程群,并在其中取專業(yè)度較高的幾個線程作為生成元,去平替掉那些不需要的線程,令他們死亡或作為「流浪線程」(脫離了線程池,由JVM或BVM直接創(chuàng)建的線程,平時我稱其為“失業(yè)線程”)。 流浪線程:一個線程由JVM或BVM直接創(chuàng)建,不受線程池的管束,與線程池整體爭奪資源。 事實(shí)上,線程生成元的實(shí)現(xiàn)是十分復(fù)雜的,涉及到動態(tài)規(guī)劃、復(fù)雜度分析等各種考慮。在上述D3群中,D3裁員到只剩下F、A兩個元素,而一個線程的執(zhí)行是原子化的、精力有限的,尤其是當(dāng)它執(zhí)行一個任務(wù)時,被加synchronized鎖的部分會導(dǎo)致F或A無法去執(zhí)行其它任務(wù)。 在這樣的條件下: E=F3=A2 D=F2 B=FA C=AF B和C的平替任務(wù)不可能同時得到執(zhí)行,D、E由于可以分別交給F和A,可以同時執(zhí)行。 對于B、C的平替,當(dāng)A執(zhí)行時(B的第一步),與此同時F同步處理C的第一步,則C阻塞,我無法斷定A和F對于接手B、C的任務(wù)后哪個執(zhí)行更快。因此當(dāng)A執(zhí)行完,會等待F執(zhí)行完成,才能完成B的最后一步,同理F必須等待A執(zhí)行完成,才能執(zhí)行C的最后一步返回結(jié)果。 這樣就出現(xiàn)了并發(fā)編程常見的bug——死鎖。 導(dǎo)致B與C兩個線程的平替任務(wù)都完不成,A和F雙雙被阻塞,由于D3裁員到只剩A、F兩個元素,這意味著當(dāng)A、F阻塞而無法執(zhí)行其它任務(wù)時,D3被鎖。 這會導(dǎo)致D3占用的內(nèi)存和涉及到的volatile變量全部被鎖住,無法正常讀寫訪問,變成臟數(shù)據(jù)或壞數(shù)據(jù),這個現(xiàn)象稱作內(nèi)存或數(shù)據(jù)的「軟損壞」。硬損壞與之相對,是指硬件磨損導(dǎo)致的數(shù)據(jù)損壞。 大多數(shù)情況下,數(shù)據(jù)損壞均為軟損壞,可以通過終結(jié)線程或釋放任務(wù),來解決被鎖住的數(shù)據(jù)。 線程生成元應(yīng)謹(jǐn)慎使用,雖然可以很大程度上站在調(diào)用方考慮,優(yōu)化能耗和發(fā)熱,但代價是容易出現(xiàn)線程死鎖。 【線性變換基礎(chǔ)】對于前述生成元有 FA≠AF 涉及到高階張量的乘積變換均不符合交換群。 但如下考慮 FA=A^T F^T 若A、F是厄米性的,那么 A^T=A,F(xiàn)^T=F 這樣可以得到 FA=AF 稱由生成元{F, A}表達(dá)的元素B、C互為同步。 這意味著B與C的任務(wù)結(jié)果是等效的,執(zhí)行完B,C的結(jié)果也出來了,因此F和A可以專攻B或C。 【忠告】能單就單,能不碰并發(fā)就不碰并發(fā),不得已時盡量鎖到位。