面試之后--并發(fā)模型

前幾天,參加了幾次面試,結(jié)果很糟糕。一來是因?yàn)闆]有做準(zhǔn)備,二是平時(shí)對(duì)那些概念也沒有太注意,只是看到覺得理所當(dāng)然是這樣,并沒有仔細(xì)考究!現(xiàn)在發(fā)覺這根本就是一種無求知欲的表現(xiàn),這里決定好好溫習(xí)一下之前的知識(shí)。

背景知識(shí)

進(jìn)程與線程

進(jìn)程的英文名是 Process,是計(jì)算機(jī)程序執(zhí)行后的實(shí)例,她包含了程序代碼和當(dāng)前的所有資源。在一般的操作系統(tǒng)中,她可能是由多個(gè)線程組成來完成并發(fā)[Concurrency]任務(wù),而多個(gè)進(jìn)程應(yīng)該是完成并行(Parallelism)任務(wù)。關(guān)于并發(fā)與并行下面也會(huì)涉及到相關(guān)區(qū)別。

線程的英文名是 Thread,她是對(duì)計(jì)算機(jī)調(diào)度的一個(gè)最小粒度,她是包含在一個(gè)進(jìn)程中的,一個(gè)進(jìn)程中的線程是共享一片內(nèi)存區(qū)域,實(shí)質(zhì)上講他們并不是一個(gè)很實(shí)體話可東西,比較抽象,需要加上時(shí)間的維度才能區(qū)別開來。

下面是一張Wiki百科上的圖,能夠很清晰的表明線程與進(jìn)程的關(guān)系。

線程

個(gè)人拙見以為進(jìn)程是與計(jì)算機(jī)的核數(shù)(Processor)有關(guān)的,一般地,幾核的CPU就應(yīng)該能產(chǎn)生幾個(gè)進(jìn)程。

我簡(jiǎn)單的打個(gè)比方,比如一臺(tái)計(jì)算機(jī)是一家公司,不考慮其他的,加入把研發(fā)部門比做CPU的話,一個(gè)公司一般會(huì)只有一個(gè)研發(fā)部門(假設(shè)只研發(fā)一款產(chǎn)品)。公司所有的研發(fā)工作都是交由這個(gè)研發(fā)部門負(fù)責(zé),可能這個(gè)研發(fā)部門會(huì)有不止一個(gè)的研發(fā)小組,都可以做同樣的一件研發(fā)工作,那么計(jì)算機(jī)中的內(nèi)核就可以類似于研發(fā)小組,他們可以同時(shí)的做相同的工作,但如果他們需要同時(shí)使用公司的生產(chǎn)線那么這可能就存在問題,下面再來說。如果公司給研發(fā)組2放假了,那么他們就可以不用干活輕松的休息,這是公司配發(fā)了研發(fā)任務(wù)應(yīng)該是由研發(fā)組1來完成,如果公司又給了一個(gè)任務(wù)給研發(fā)組1,那么研發(fā)組就屬于并發(fā)狀態(tài),他們的做任務(wù)就是線程。他們小組的leader開會(huì)說,根據(jù)公司的章程,咱們接到了兩個(gè)任務(wù),那我們就按周輪流來做吧。在計(jì)算機(jī)中這可能就是有操作系統(tǒng)來決定的。假設(shè)是每個(gè)星期一切換任務(wù),那么周一的時(shí)候的工作效率可能會(huì)比較低,因?yàn)橐ㄙM(fèi)不少時(shí)間來做任務(wù)的切換工作,收集資料和整理資料,這就是線程切換的開銷。

假如任務(wù)一需要使用公司的計(jì)算機(jī)房,任務(wù)二也需要,我們從現(xiàn)實(shí)的宏觀角度來看的話,感覺這完全沒有問題,這周機(jī)房處理任務(wù)一,下周機(jī)房處理任務(wù)二。但是仔細(xì)想想其實(shí)是存在問題的,加入我們?cè)谥芰浇灰恍?shù)據(jù)給機(jī)房處理,比如說模型訓(xùn)練,可能在我們交接任務(wù)的約定時(shí)間周一的時(shí)候,他們還沒有處理完成,而小組1的又給了他們?nèi)蝿?wù),那么這就存在的資源問題,機(jī)房可能會(huì)在門口掛上了“任務(wù)中,請(qǐng)勿打擾”,所以就有了鎖的這個(gè)概念,表示現(xiàn)在忙,暫時(shí)不能進(jìn)行訪問。

異步回調(diào)

我們傳統(tǒng)的過程式程序可能就跟比較古板的小組1一樣,到期咱就切換任務(wù)嗎。他們覺得這種方式還是不能把工作效率提高到最高。他們開會(huì)就討論怎么能提高這個(gè)效率呢,有個(gè)外號(hào)蟒蛇的就說呀,他覺得有時(shí)候等PCB的測(cè)試板實(shí)在是比較耗時(shí)間,有時(shí)候一兩天啥事沒有,就是干等著板子打出來做測(cè)試,這期間也不知道干啥。不過最近有個(gè)朋友告訴我一個(gè)比較好的工作方法,先做好任務(wù)的規(guī)劃,把哪些可以同時(shí)做的事情列出來,以后就按照這個(gè)表來做,有空閑就去做其他的事情,等前面做的東西可以繼續(xù)了,就繼續(xù)回頭做前面的事情。

他們新來外號(hào)面條的就說,你們連這個(gè)都不懂啊,我一直都是這么干的。

前面蟒蛇提到的問題就是平時(shí)經(jīng)常碰到的阻塞,比如磁盤IO,網(wǎng)絡(luò)IO這些比較耗時(shí)間的操作。他那個(gè)朋友(Gevent)教的方法就是異步。

異步回調(diào),就是遇到阻塞時(shí),就去做其他的事情(新的線程),當(dāng)之前的產(chǎn)生結(jié)果了就把那個(gè)結(jié)果拿回來處理,但是這不是在你原來的形成規(guī)劃中。

對(duì)于上面的例子,蟒蛇可能就對(duì)PCB生產(chǎn)線上的人說,他就不在這守著了,做好給個(gè)電話,他自己去取就好了,或者陪人送到他辦公室。這就是異步的通訊與回調(diào)機(jī)制,打電話通知他就是告訴他完成的這個(gè)消息,他在過來取走;而寄到他辦公室,就是直接把執(zhí)行的結(jié)果返回到預(yù)定的地方,他會(huì)每天都檢查一下是否有結(jié)果了。

并發(fā)

開始說說重點(diǎn),并發(fā)了。記得有個(gè)“七天七”系列的書,當(dāng)然這和國(guó)內(nèi)“X天”系列不一樣,這個(gè)系列本本算得好書,其中就有一本是《七天七并發(fā)》,可惜當(dāng)時(shí)在圖書館找到時(shí),我快畢業(yè)了。

有不少編程語言實(shí)在語言級(jí)別實(shí)現(xiàn)的并發(fā),例如,Erlang、Haskell、Scala、Clojure,以及比較年輕的Golang。相信這些都聽過,我個(gè)人是真的沒有去仔細(xì)研究過,借這次機(jī)會(huì)好好看看。

并發(fā)模型

  • Communicating Sequential Processes
  • Actor

資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,769評(píng)論 25 709
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,757評(píng)論 11 349
  • 忻卉:姐姐,我討厭我恨某某人,可是,我又想到宇宙法則是你想啥宇宙就擴(kuò)大啥,擔(dān)心這樣的恨法,會(huì)讓我更情...
    玉忻卉閱讀 300評(píng)論 0 1
  • 一段話送給正在為理想奮斗的小伙伴們,愿與大家共勉: 我們能走多久,靠的不是雙腳,而是志向,鴻鵠志在蒼宇,燕雀心系檐...
    永不放棄哥閱讀 238評(píng)論 0 0
  • 晚上散步隨拍 作了一下簡(jiǎn)單的編輯
    和為貴0608閱讀 149評(píng)論 1 1

友情鏈接更多精彩內(nèi)容