作者ggg12345 (ggg)
看板Programming
标题Re: 不相干的程式做multi-thread有帮助吗?
时间Sun Nov 9 22:05:22 2008
※ 引述《CharArray ( char[] )》之铭言:
: ※ 引述《ggg12345 (ggg)》之铭言:
: : 完全不相干的程式片段成为muti-thread时, 不管是轮流或多核
: : 交错并行, 最大的优点就是可以避免 process 切换时带来不必要的
: : context switching. 但单核只有单组 processor register set 时,
: : 仍免不了要 user program 自行进行 register save/restore 动作,
: : 因为 cpu 内部资源还是会有共用的地方, 只是需要处理的量可以少
: : 很多.
: 请问一下,所谓少很多,可以明确的指出是少处理哪些事吗?
: 因为我想知道有什麽事是把multi-process转成multi-thread後,在context-switch
: 可以减少的工作量
process 切换时是透过 system call trap 或 time-slice interrupt 改变
执行次序, 首先是 prefech 与 cache 因次序改变可能失效, 其次由 OS
kernel 的 scheduler/dispatcher 按标准运作做整个 processor register,
memory mapping table 与 执行环境的 PCB save , 随後再依状况找出下一
个 process 的 PCB restore 重新让新 process 执行.
user space 的 multi-thread 基本上属於同一个 process space 之内,
切换或用多核并行多绪时, 使用者(程式设计者)知道只共用那些 resource,
不受干扰的 register 或 data memory 就可不必做不必要的 save/restore.
执行时也比较能考量不大幅更动到 cache 与 prefetch pipeline.
Multi-thread 要发挥效用, 程式设计者就要考虑到相当细节的部份, 同
步与切换的排程问题都得亲自处理, 才能发挥出并行处理又无太多 overhead
的效用.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.4.12
1F:→ meltice:请问user space thread有什麽例子吗? 115.83.193.81 11/09 22:37
2F:→ meltice:听说现在的Linux Windows都是以thread为 115.83.193.81 11/09 22:37
3F:→ meltice:scheduling的单位 不是process 115.83.193.81 11/09 22:37
4F:→ meltice:好像以前的Linux是以process为排程单位 115.83.193.81 11/09 22:38
5F:推 sunneo:Win32API的Fiber以及linux的context都是 61.227.229.98 11/10 00:44