作者shiningboy ()
看板C_and_CPP
標題[問題] 多核與多行程,多執行緒的問題
時間Wed May 23 09:12:08 2018
開發平台(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 溝通的麻煩
請問這樣的思考方向在實際應用上是對的嗎??
自己實作的經驗比較少 , 還請各位幫忙解惑
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.152.155
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527037930.A.F3B.html
※ 編輯: shiningboy (42.72.152.155), 05/23/2018 09:19:38
→ bluesoul: 一可以這樣想每錯 05/23 09:19
→ loveflames: multi-process用在業務邏輯複雜的時候 05/23 09:23
→ loveflames: 以team work來說,勢必會這樣設計,不可能所有人都開 05/23 09:24
→ loveflames: 發同一隻程式 05/23 09:24
→ school4303: 沒code感覺會被版工刪文 05/23 15:32
推 a1u1usul3: 二的部分,行程是指process?執行緒是指thread? 05/23 16:20
→ a1u1usul3: 如果是的話,基本上沒錯吧。多執行緒共享很多東西,減 05/23 16:22
→ a1u1usul3: 少很多overhead 05/23 16:22
→ threesmaller: 跟業務複雜沒關係吧 task如果不會一起做的話 就一定 05/23 16:29
→ threesmaller: 是不同process 05/23 16:29
→ elements: 執行緒是排程的單位,程序是一個裝執行緒的箱子。一個 05/24 02:10
→ elements: 程序自帶一個執行緒。作業系統會決定誰排程在哪,未必 05/24 02:10
→ elements: 四個執行緒就要分給四個核心,除非你設定affinity。你 05/24 02:10
→ elements: 有一票執行緒就表示你有一堆排程單位,只要在作業系統 05/24 02:10
→ elements: 上不被block,就可以分到執行時間。程序裡面位址空間是 05/24 02:10
→ elements: 共享的,執行緒的堆疊是獨立的。至於你要他們做一樣的 05/24 02:10
→ elements: 事或不同的事,那是你的架構問題,沒有一定。這算是基 05/24 02:10
→ elements: 礎概念,如果要講Linux就是大家都是task,只是分享的部 05/24 02:10
→ elements: 分不同。 05/24 02:10