多线程之用户级线程切换随笔

线程及切换

线程:比进程更轻的动态执行序列,同一进程中的多个线程可以共享资源(内存),故线程间的切换相比进程更加快速、方便。

线程的切换:是指令之间的切换,从一段执行序列(程序)切换到另一段执行序列(程序),而内存映射表不变;即PC的切换,线程的切换也是进程切换的重要组成部分

进程及切换

进程的切换包括:指令的切换和内存(映射表)的切换(资源的切换)

线程切换举例

用户打开某个网站浏览网页,网页内容有文本、图片。整个过程通过以下三个线程操作实现:

ThreadA:负责从服务器下载数据到本机缓冲区

ThreadB:负责从缓冲区读取文本,并显示到屏幕

ThreadC:负责从缓冲区读取图片、解析、并显示到屏幕

3个线程可以通过下述切换进行推进

ThreadA下载文本数据到缓冲区—(切换到ThreadB)—>ThreadB从缓冲区读取文本、并显示到屏幕—(切换到ThreadA)—>ThreadA下载图片到缓冲区—(切换到ThreadC)—>ThreadC从缓冲区读取图片、解析、并显示到屏幕

伪代码如下:

void WebExplorer(){
	char URL[]="http:cms.hit.edu.cn";   //浏览器网址
	char buffer[1000];   //缓冲区
	ThreadA_create(...,GetData,URL,buffer);  //创建线程A,用于将数据从服务器下载至本机缓存
	ThreadB_create(...,show,buffer);	//创建线程B,用于从缓冲区读取数据,将数据显示到屏幕
}

void GetData(char *URL,char *p){...};   //从服务器下载数据至本机缓存
void Show(char *p){...};   //数据显示至屏幕

其中,Create函数实现创建线程,Yield函数实现线程的切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值