热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

ch3_2多进程中寄存器的切换

运行中的程序在进行切换时,可以分为以下两类:线程:只涉及指令的切换,硬件资源没有切换;进程:包


运行中的程序在进行切换时, 可以分为以下两类:


  1. 线程: 只涉及指令的切换, 硬件资源没有切换;
  2. 进程: 包含指令的切换,以及硬件资源的切换, 其中映射表便是一种内存资源。
    在这里插入图片描述


1. 进程间的切换示意图

这一讲中, 只会涉及指令的切换,暂不考虑资源的切换。

本质就是 映射表不改变, pc 指针改变


1.用户级线程

1.1 线程 thread

由前面的进程之间的切换可知,

不同的进程之间在进行切换时, 需要切换各自进程所对应的PCB, 以及 各个进程对应的 映射表;

由于不同的进程对应不同的映射表, 切换时,代价较大;

为了避免这种代价, 在切换时, 使得不同的程序之间共享同一张 映射表;

在这里插入图片描述



2. 运行的程序之间 共享资源 , 如内存资源, 数据资源 这些的共享

线程: 保留了程序并发的有点;
减少了进程切换的代价。


1.2 线程的实例

浏览器的使用:


  • 一个线程用来从服务器接受数据

  • 一个线程用来显示文本;

  • 一个线程用来处理图片(如解压缩)

  • 一个线程用来显示图片;

线程之间的资源共享:


  • 将从服务器中接受的数据, 如文本,图片数据 放在缓冲区中, 而其他的进程需要从映射表中读数据;

而如果使用进程完成上述任务,
进程之间,地址是分离的。
由于不同的进程,会有不同的映射表, 那么这些映射表将会存放在内存的不同区域, 这样同一份数据占用了更多的内存,这没有必要。

一个线程在下载数据时, 这个过程中,切换到其他线程, 用来显示文本数据;
当文本数据显示完成之后, 在重新切换到下载进程。


1.3 代码实现

pthread_create() 创建多个线程,

在各个线程执行的过程中,增加一些内容,

Yield () 函数 实现线程之间的切换,







推荐阅读
author-avatar
少少_LV
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有