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

看板C_and_CPP (C/C++)作者時間7年前 (2018/05/23 09:12), 7年前編輯推噓1(1018)
留言19則, 6人參與, 7年前最新討論串1/1
開發平台(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

05/23 09:19, 7年前 , 1F
一可以這樣想每錯
05/23 09:19, 1F

05/23 09:23, 7年前 , 2F
multi-process用在業務邏輯複雜的時候
05/23 09:23, 2F

05/23 09:24, 7年前 , 3F
以team work來說,勢必會這樣設計,不可能所有人都開
05/23 09:24, 3F

05/23 09:24, 7年前 , 4F
發同一隻程式
05/23 09:24, 4F

05/23 15:32, 7年前 , 5F
沒code感覺會被版工刪文
05/23 15:32, 5F

05/23 16:20, 7年前 , 6F
二的部分,行程是指process?執行緒是指thread?
05/23 16:20, 6F

05/23 16:22, 7年前 , 7F
如果是的話,基本上沒錯吧。多執行緒共享很多東西,減
05/23 16:22, 7F

05/23 16:22, 7年前 , 8F
少很多overhead
05/23 16:22, 8F

05/23 16:29, 7年前 , 9F
跟業務複雜沒關係吧 task如果不會一起做的話 就一定
05/23 16:29, 9F

05/23 16:29, 7年前 , 10F
是不同process
05/23 16:29, 10F

05/24 02:10, 7年前 , 11F
執行緒是排程的單位,程序是一個裝執行緒的箱子。一個
05/24 02:10, 11F

05/24 02:10, 7年前 , 12F
程序自帶一個執行緒。作業系統會決定誰排程在哪,未必
05/24 02:10, 12F

05/24 02:10, 7年前 , 13F
四個執行緒就要分給四個核心,除非你設定affinity。你
05/24 02:10, 13F

05/24 02:10, 7年前 , 14F
有一票執行緒就表示你有一堆排程單位,只要在作業系統
05/24 02:10, 14F

05/24 02:10, 7年前 , 15F
上不被block,就可以分到執行時間。程序裡面位址空間是
05/24 02:10, 15F

05/24 02:10, 7年前 , 16F
共享的,執行緒的堆疊是獨立的。至於你要他們做一樣的
05/24 02:10, 16F

05/24 02:10, 7年前 , 17F
事或不同的事,那是你的架構問題,沒有一定。這算是基
05/24 02:10, 17F

05/24 02:10, 7年前 , 18F
礎概念,如果要講Linux就是大家都是task,只是分享的部
05/24 02:10, 18F

05/24 02:10, 7年前 , 19F
分不同。
05/24 02:10, 19F
文章代碼(AID): #1R1B_gyx (C_and_CPP)
文章代碼(AID): #1R1B_gyx (C_and_CPP)