英语轻松读发新版了,欢迎下载、更新

为什么都说线程切换开销小于进程呢?

Harrd 发布于 2014年07月19日
无人欣赏。

按我的理解,线程的三种主流实现方式,内核-用户 一对一,一对多,多对多

一对多时,线程调度完全由用户实现,线程切换时不需要切入内核态,开销可能比较小,这点可以理解

一对一时,如果OS以线程作为调度单位(不清楚一对一时是否也可以按进程做调度单位,如果可以那么线程如何调度呢?),从进程A的线程1 -> 进程B的线程1, 这种调度的开销应该和从进程A -> 进程B的调度相当吧?

请大家帮忙解答下困惑,谢谢

共12条回复
尽情打怪 回复于 2014年07月19日

google的: 进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下文(相关寄存器状态和栈的信息)就好了,动作很小

youyongsong 回复于 2014年07月19日

在unix中:

  • 同一个进程中的线程间进行切换,差不多仅需要切换线程的上下文(如寄存器状态等)
  • 切换到已经映射好的进程,同样差多仅需要切换进程的上下文和页表切换
  • 切换到尚未建立映射的进程,除了需要切换上下文、页表切换,更重要的是需要建立映射
  • 不同进程的线程之间切换,开销同上一条

在上面所说的开销中,切换进程上下文开销很小几乎可忽略,而建立映射的开销是很大的。所以我认为线程与进程调度的开销差距主要在于是否需要建立映射

Harrd 回复于 2014年07月19日

1楼 @尽情打怪 所以我说当从进程A的线程1 -> 进程B的线程1时,虽然是线程调度,但是是不同进程的线程,这样的话页表页目录也应该要切换,所以就不太好说结果了

Harrd 回复于 2014年07月19日

2楼 @youyongsong 请问您说的建立映射指的是什么映射?

另外,我认为一对多模型应该不用陷入内核是因为这种方法相当于编程语言自己实现的线程功能,这种情况下OS以进程作为最小调度单位,当时间片分给一个进程时,进程利用自己的代码来模拟线程,从而对内核是透明的,内核只看得到一个进程,所以这种方式不用陷入内核态

youyongsong 回复于 2014年07月19日

4楼 @Harrd 刚才自己对你说的三种模型有些误解,刚刚查了一下才明白,谢谢。
对于32位系统每个进程都需要有一个4G的虚拟内存,该虚拟内存映射到物理内存的相应地址上。如果你要切换到的进程还没有建立虚拟内存,那么就需要建立一个4G的虚拟内存并映射到物理内存的相应位置。

Harrd 回复于 2014年07月19日

5楼 @youyongsong 额 这个东西应该是在第一次创建进程就弄好了,也就是我们所说的页表。最多只是页表中的页可能在磁盘上,需要进行换页。换页的开销确实比较大,毕竟涉及磁盘调度,但这点跟我的问题没啥关系。。

youyongsong 回复于 2014年07月19日

6楼 @Harrd 你问题中一对一时所说的情况不就是我第一条回复中的第4种情况吗,此时的线程切换等同于进程切换,开销是相当的。
切换的开销主要就是看是否需要中断进入内核是否需要重新建立映射(建立页表)
其中:

  • 进程间切换
    • 需要进入内核
    • 可能需要重新建立映射
  • 不同进程中线程切换
    • 等同于进程间切换
  • 1对1模型同进程中的线程切换
    • 需要进入内核
  • 1对多模型中的线程切换

个人观点,有错请提出,谢谢。

Harrd 回复于 2014年07月19日

7楼 @youyongsong 那我们观点就基本一样。但页表的建立应该是在创建进程时而不是上下文切换。

youyongsong 回复于 2014年07月19日

8楼 @Harrd 页表的建立不仅是在创建时才进行的,当资源占用内存过多或当前进程需要占用很大内存导致剩余内存无法支持现有操作时,原有的映射就会被撤销(即进程的的部分页表被撤销)以获取空闲内存来支持现有操作,这样重新切换回被撤销映射的进程时就又需要重新建立映射(建立页表)。

Harrd 回复于 2014年07月19日

9楼 @youyongsong 我想你说的是缺页吧? 也就是页表项、、 关于这个建立映射有没有资料发出来看看,谢谢

youyongsong 回复于 2014年07月19日

10楼 @Harrd 很抱歉,现在手上没什么好的相关资料,可以网上查一下mmu相关的资料,我以前好像是在DDR2芯片手册中看到的。

Harrd 回复于 2014年07月19日

11楼 @youyongsong 恩 谢啦,你说的应该就是缺页吧,页面在硬盘上,导致的缺页中断处理

本帖有12个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
[顶 楼]
|
|
[底 楼]
|
|
[首 页]