作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1527037930.A.F3B.html
※ 编辑: shiningboy (42.72.152.155), 05/23/2018 09:19:38
1F:→ bluesoul: 一可以这样想每错 05/23 09:19
2F:→ loveflames: multi-process用在业务逻辑复杂的时候 05/23 09:23
3F:→ loveflames: 以team work来说,势必会这样设计,不可能所有人都开 05/23 09:24
4F:→ loveflames: 发同一只程式 05/23 09:24
5F:→ school4303: 没code感觉会被版工删文 05/23 15:32
6F:推 a1u1usul3: 二的部分,行程是指process?执行绪是指thread? 05/23 16:20
7F:→ a1u1usul3: 如果是的话,基本上没错吧。多执行绪共享很多东西,减 05/23 16:22
8F:→ a1u1usul3: 少很多overhead 05/23 16:22
9F:→ threesmaller: 跟业务复杂没关系吧 task如果不会一起做的话 就一定 05/23 16:29
10F:→ threesmaller: 是不同process 05/23 16:29
11F:→ elements: 执行绪是排程的单位,程序是一个装执行绪的箱子。一个 05/24 02:10
12F:→ elements: 程序自带一个执行绪。作业系统会决定谁排程在哪,未必 05/24 02:10
13F:→ elements: 四个执行绪就要分给四个核心,除非你设定affinity。你 05/24 02:10
14F:→ elements: 有一票执行绪就表示你有一堆排程单位,只要在作业系统 05/24 02:10
15F:→ elements: 上不被block,就可以分到执行时间。程序里面位址空间是 05/24 02:10
16F:→ elements: 共享的,执行绪的堆叠是独立的。至於你要他们做一样的 05/24 02:10
17F:→ elements: 事或不同的事,那是你的架构问题,没有一定。这算是基 05/24 02:10
18F:→ elements: 础概念,如果要讲Linux就是大家都是task,只是分享的部 05/24 02:10
19F:→ elements: 分不同。 05/24 02:10