[問題] 多核與多行程,多執行緒的問題

作者: shiningboy   2018-05-23 09:12:08
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
新手自學
對於比較基礎的東西比較不了解,想請大家幫忙解惑一些問題
第一個問題 :
就是目前我的電腦是 qual core processor
這樣可以把它當作有四個 processor 來看待嗎??
目前看到有關介紹多行程及多執行緒的資料
都會假設有四個 processor
多行程的狀況下 :
從 parent process fork() 4 個 child process
然後每一個 child process 都會對應到一個 processor
多執行緒的狀況下 :
從程式執行之後的 process create 4 個 thread
然後每一個 thread 都會對應到一個 processor
這在實際上 qual core CPU 也可以這樣對應嗎??
就是把每一個 core 當作一個 processor 來看待,這樣正確嗎??
第二個問題 :
關於要用"多行程"還是用"多執行緒"的問題
目前的理解是 :
選擇 多行程 的狀況是 :
如果要做的事情不同 , context 差很多 ,
memory map 裡面的 data 不會共用到的時候,就使用多行程去做
如果偶而需要溝通的時候,再用 IPC 去溝通
選擇 多執行緒 的狀況是 :
如果要做的事情有相關,類似是把同一件事情拆分成好幾個部分
資源需要共享的時候,就用 multi-thread 去做 ,
可以減少 system call 的 overhead
以及省去 IPC 溝通的麻煩
請問這樣的思考方向在實際應用上是對的嗎??
自己實作的經驗比較少 , 還請各位幫忙解惑
謝謝
作者: bluesoul (忙死你老爸)   2018-05-23 09:19:00
一可以這樣想每錯
作者: loveflames (咕啾咕啾魔法陣)   2018-05-23 09:23:00
multi-process用在業務邏輯複雜的時候以team work來說,勢必會這樣設計,不可能所有人都開發同一隻程式
作者: school4303 (某爬蟲類)   2018-05-23 15:32:00
沒code感覺會被版工刪文
作者: a1u1usul3 (Q-Max)   2018-05-23 16:20:00
二的部分,行程是指process?執行緒是指thread?如果是的話,基本上沒錯吧。多執行緒共享很多東西,減少很多overhead
作者: threesmaller (三小兒)   2018-05-23 16:29:00
跟業務複雜沒關係吧 task如果不會一起做的話 就一定是不同process
作者: elements (Helianthus annuns)   2018-05-24 02:10:00
執行緒是排程的單位,程序是一個裝執行緒的箱子。一個程序自帶一個執行緒。作業系統會決定誰排程在哪,未必四個執行緒就要分給四個核心,除非你設定affinity。你有一票執行緒就表示你有一堆排程單位,只要在作業系統上不被block,就可以分到執行時間。程序裡面位址空間是共享的,執行緒的堆疊是獨立的。至於你要他們做一樣的事或不同的事,那是你的架構問題,沒有一定。這算是基礎概念,如果要講Linux就是大家都是task,只是分享的部分不同。

Links booklink

Contact Us: admin [ a t ] ucptt.com