进程与线程-2、用户级线程切换过程

参考哈工大李治军老师公开课。



用户级线程示例(浏览器)

在浏览器使用的过程中,访问一个网页需要在服务器下载资源,并且在客户端的浏览器中显示出来。我们看到页面会先显示一些文字、图片,然后逐步加载其他信息,进而逐步完善。

图一:网页加载过程

通过这个页面加载过程是一个边加载边显示的过程,可以看出浏览器两个程序在跑,一个负责现在资源,一个负责显示。所以浏览器是多用户程序,而且是用户级。

图二:浏览器执行流程

用户级线程切换过程(以两个线程为例):

在用户级线程中,每个线程会被分配一个线程进行栈TCB,用于记录每个线程执行时的跳转地址。例子:

执行A函数,调用了B函数,将函数B的地址104压入TCB1,然后执行B函数,执行到Yield(),将204压入TCB1中;在Yield()中,会执行当前esp指针的转换,指向TCB2;

        执行C函数,调用D()函数,将304压入TCB2,执行D函数,运行Yield(),在执行当前TCB指针的切换,切换至TCB1,TCB1中的栈顶弹出,继续执行B()函数后面的内容。

图三:用户级线程切换过程

用户级线程并发执行的并发度相对较低,而且比较容易出现阻塞,例如图三中在执行A()函数时,在调用B()函数之前出现异常,导致程序不能往下执行了,也无法进行线程的切换,这样就会导致程序的并发性降低。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值