我睜開了眼睛,周圍像是乙個花園,乙個男人朝我走過來,他微笑著對我說:「你好,我是執行緒亞當,剛剛我呼叫了作業系統的庫函式thread_create創造了你。」
「創造了我?那我應該叫你什麼?」我疑惑不解。「哦,不用擔心,我們是平等的個體,不存在附屬關係,就叫你執行緒夏娃吧!」
夏娃,這是我的名字,我是乙個執行緒,亞當也是乙個執行緒。我對自己的了解開始多了起來。「只有我們兩個人麼?」我問他。「暫時就我們兩個執行緒,我們共享這個叫做伊甸園的位址空間。還有其它東西我們也是共享的,不久你就知道了。」
「我們是作業系統耶和華共同創造的。他希望我們能互相合作,一起完成一些工作。」亞當對我解釋道。」你一定疑惑,為什麼要有多個執行緒一起完成耶和華給我們的工作。因為執行任務的cpu太快了,以至於它可以支援多個執行緒一起工作。在你還沒有被創造的時候,只有我乙個執行緒在使用cpu,但我不是每時每刻都能使用它,以至於它大多數時間都在空轉,浪費了它的潛力。現在你出現了,我們就可以一塊使用它了。我們一塊去看看cpu吧。「
說著,我們來到了一塊扁平的金屬片旁邊,「這就是cpu了,沒有執行緒在使用它,看我的。」只見亞當把手靠近它,cpu開始發出一束白色的光束,直刺天空,「它在工作了,我現在處於執行態,待會再和你解釋我們執行緒的狀態。剛剛cpu發出的光束,是它在執行一次資料庫查詢操作。這個過程比較耗時,這個時候我如果要等查詢操作完成之後我才鬆手的話,那就浪費了cpu的計算能力了。」說著,亞當在手上抽開,「等剛才的光回來之後,就是資料庫查詢的結束,到那時候我再使用cpu就好了,這樣我就能幹其它事情了,比如,和你聊聊天,哈哈哈。這個過程其實叫做非同步。」
我看到cpu又黯淡下來了。其實,從一開始我就想靠近它,剛剛亞當處於執行態的時候,我只能等它完成,我急於想從就緒態轉化到執行態。於是,我將手靠近cpu,不出所料,它開始發出光芒,我想讓它進行一些數**算,很快,它就完成了,又恢復到了平常的銀白色。
「我問你乙個問題,你覺得剛剛我們的操作,在上帝使用者耶和華眼裡,有先後順序嗎?」亞當問我,我搖搖頭,不知道。「沒有的,感覺很奇怪是吧。你應該聽過這樣一句話,天上一天,人間一年。我們和cpu的時間是一樣的,這裡的一年,在耶和華眼裡,其實只有一天。你想想,這是多麼令人振奮的事實。我們用cpu做的很多事情,在上帝使用者耶和華的感受上,可能就只有一秒鐘!這就是為什麼我需要你的原因,執行緒越多,我們就可以用cpu做越多的事情。」
我恍然大悟,「那,只有我們兩個執行緒,對cpu來說,不是還很充足嗎?」「是的是的,但是我們先從簡單的開始。後面我會用我的肋骨創造更多的執行緒,到時候,我們可以用一定數目的執行緒作為乙個執行緒池。到時候會有很多任務,每當有乙個任務到來的時候,就派出乙個執行緒來拿到一定的cpu時間,執行乙個任務,完成後再讓另外乙個執行緒拿到cpu時間片,再執行任務。。。到時候,cpu就可以完全發揮它最大的能力了。「我看到亞當的眼裡有閃光,他應該對這個願景很期待吧,我也是。
我又有乙個問題:」誰給我們任務呢?還有,我們沒有了任務,會怎麼樣?「
」是耶和華,他是計算機使用者,比如在瀏覽網頁,購買商品,就會給我們很充足的任務。「亞當說。「我們誕生的意義就是為了完成耶和華給的各種各樣的、甚至是稀奇古怪的任務。如果我們沒有了任務,也就是我們不被需要了,那麼我們就會被銷毀。但也有可能回到執行緒池等待,如果有的話。」
剛剛的光束回來了,亞當拿出乙個堆疊,「這束光帶回來了乙個操作結果位址,我會將剛剛資料庫查詢操作這一過程中用到的區域性變數和操作完成之後的返回位址,放到我的堆疊中。接下來我就可以用這些資訊繼續操作cpu了。」之間亞當將手靠近cpu,cpu使用了亞當堆疊中的資訊,」我剛剛是從資料庫中查詢到使用者的個人資訊,現在cpu在幫我校驗這些資訊,完成之後會將結果返回給使用者,也就是耶和華。「不出所料,cpu再次發出一束光,透過蒼穹,我想,耶和華應該受到了cpu給它的結果了吧。
「剛剛的堆疊,是我們每個執行緒都會有的,這個東西就不是共享的哦。每個堆疊都會儲存我們呼叫相應過程的區域性變數和過程呼叫完成之後使用的返回位址。堆疊裡存放的是執行歷史,或者保留現場都可以。我看了旁邊懸浮著我的堆疊,裡面空空如也,果然和亞當的不一樣。
我想問他最後乙個問題:「既然是我們在使用cpu,那我們執行緒和cpu的關係是什麼?」
亞當笑了,」我知道你會問這個問題。其實很好回答,我們是使用者創造出來的,可以說我們是一種邏輯上的存在,不像cpu是個現實中的物體,執行緒是cpu上被排程執行的邏輯實體。乙個叫做執行緒排程器的東西會決定我們的執行順序和獲取cpu的時間。還有,雖然我們之間是平等的,但我們屬於同乙個叫做程序的東西,要不我再很你說說程序?「
「下次吧。」我已經心不在焉了,因為我看到旁邊的一顆樹上有乙個碩大的果實,看起來誘人極了,我不禁向樹的方向走去。
git 我是大白,我是猿
假如我們現在在dev分支上,剛開發完專案,執行了下列命令 git add git commit m 提交的備註資訊 git push u origin dev想將dev分支合併到master分支,操作如下 1 首先切換到master分支上 git checkout master2 如果是多人開發的話...
我是菜鳥 java中多執行緒機制筆記
futhuretask executor 每個執行緒都有乙個自己的map,通過threadlocal.set 將這個新建立的物件的引用儲存到各執行緒的自己的乙個map中,執行threadlocal.get 時,各執行緒從自己的map中取出放進去的物件,因此取出來的是各自自己執行緒中的物件,threa...
我是大牛,我自豪
最近幾個月,堅持在csdn寫了大量的原創文章,以至於很多人都說我是 大牛 不但如此,口口相傳,互相影響,太多的人都稱呼我為 大牛 我還是很有自知之明的,知道自己懂什麼,不懂什麼。所以,一直在很努力地學習。週末就從來沒有停止過學習。每次別人說我是大牛的時候,我都很 實事求是 地反饋他們 技術方面,我只...