线程及切换
线程:比进程更轻的动态执行序列,同一进程中的多个线程可以共享资源(内存),故线程间的切换相比进程更加快速、方便。
线程的切换:是指令之间的切换,从一段执行序列(程序)切换到另一段执行序列(程序),而内存映射表不变;即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函数实现线程的切换