[问题] 多核与多行程,多执行绪的问题

楼主: 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