Ads 468x60px

##EasyReadMore##

12 7月, 2016

fork 與 thread 的差別



fork 一個 process 需要比較多的資源,他需要產生許多新的堆疊來裝入所有一個新程序需要的資料,而且 fork 出來的程序,和原來的程序基本上是互相獨立的,也就是說,他們的資源不共用;

thread 需求的資源比較少,產生一個 thread 不需要建立那麼多資料,他只是原來工作程序的分支,會和原來的程序使用到共同的資源,因此對系統來說,thread 建立的成本比 process 少很多另外,一般而言,寫一個程式,在執行時就相當於你的系統 fork 一個 process,並且將這個 process 用你寫的程式去取代,每個而 Process 當中至少包含一個 thread,但如果 thread 當中又執行 create_thread,這 Process 就會變成 multi-thread Process,但這 Multi-thread 裡面的所有 threads 都共用相同的資源,也可以輕易互通有無;

但如果你裡面的 thread 又去 fork 一個 Process,那麼系統就必須把當下你這 Process 的所有東西進行複製,產生一份全新的 Process ,這新的 Process 就和你原來的 Process 沒什麼關係了﹙還是可以互通有無,但會變得比較麻煩﹚ 

fork 會複製與原來資料完全相同的資料,但這是否算是浪費則很難講,如果你子流程不會使用到原先資料,則這複製就算浪費,但如果會用到呢?如果會改到呢?如果改到之後,父流程與子流程不希望互相影響,這不就是可以剛剛好符合預期了嗎?所以結論是,沒有所謂浪費與否,只有這工具適不適合你想要的功能

0 意見:

張貼留言

 
Blogger Templates