看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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