线程的管理 用户态的多线程 内核态的多线程
补:
进程,这一章,需要一点操作系统知识,可以看到分布式系统知识,还是有点广的
本章的重点是虚拟化那一节
进程的组成:线程
那分布式系统中的线程怎么说?
处理器:提供一组指令以及自动执行一系列指令的能力
线程:线程是CPU调度的最小单位(最小的软件处理器)
进程:进程是资源分配的最小单位
处理器上下文:存储在处理器寄存器中的值的最小集合,用来执行命令
线程上下文:存储在处理器寄存器和内存中的值的最小集合,用来执行命令
进程上下文:存储在处理器寄存器中的值的最小集合,用来执行线程命令
观察1:一个进程里线程共享数据段、地址段
观察2:进程的上下文切换需要涉及到内核,非常耗时间
观察3:一般,进程要比线程消耗更多的计算机资源
这里提到了一个现象:就是在大量的APP使用进程进行协作完成某项功能,使用进程间通信,这是非常耗费资源的
第一步:从用户空间到内核空间
第二步:进程上下文切换,从A到B
第三步:从OS内核空间到用户空间
那为了解决耗时间的问题,想到两个
操作系统内核提供线程,还是将线程作为用户级软件包的一部分?
上面介绍线程作为用户级软件包的一部分的优缺点:
优点:可以在不支持OS下,也可以实现多线程
缺点: 若是某个线程需要调用IO,后面线程因为操作系统不支持多线程,而被阻塞
若操作系统不支持多线程,就不能将一个进程上的多线程在多个核上运行
下面介绍操作系统内核提供线程的优缺点:
下面介绍混合式操作线程(依然在用户空间实现线程调度,但是如果发生阻塞后,让内核参加进来进行调度)的优缺点:
将用户空间的某个线程状态与内核空间内的轻量型进程进行绑定
LWP
缺点如下红字
分布式系统实现多线程的例子和好处
多线程服务器的工作原理:
有两种线程:(dispatch thread)(worker thread)
下面介绍服务器的三种模型:
1,多线程
2,单线程进程模型
3,有限状态机
下面就是本节的重点:虚拟化。。。。。就是讲了虚拟化有哪些类别
换了另外一个人的ppt
传统计算机:硬件,操作系统,应用
虚拟化后:用主操作系统跑的硬件,虚拟层,虚拟机(虚拟机里有:虚拟硬件,客户操作系统,应用)
什么是虚拟化:一个使软件进行间接调用硬件的层
操作系统运行在虚拟层上面,通过虚拟层来间接的调用下面的硬件
虚拟化的种类:
(1)虚拟机直接与硬件打交道,称为物理机
(2)
(3)虚拟机运行在主操作系统上,比如Docker,运行在Linux的VMM
虚拟机定义:可以跑guest OS的软件
GOS定义:一个运行在虚拟环境中的操作系统
VMM:就是虚拟层
这种低级别的虚拟化操作是云计算的基础
VMM直接调用硬件层,根据需要分配所需storage
VMM的操作之一:把Guest 操作系统和上面的APP 当做磁盘镜像,就可以随意复制,移动,迁移
虚拟化的分类
1,在应用层
2,在函数层
3,在操作系统层
4,硬件抽象层做虚拟化:对各种硬件去做虚拟化
5,在指令架构做虚拟化:把一个指令集翻译成另外一个指令集
在指令架构上进行虚拟化
将一个指令系统拦截翻译成另外一个指令系统
优点:可以兼容大量旧的二进制代码
缺点:性能损失较大
在硬件层上做虚拟化,位虚拟机生成虚拟硬件环境,并通过虚拟化来管理硬件,,用的最广!
优点:具有较高的性能和良好的应用隔离性
缺点:由于硬件型号的复杂性,实施的成本也很高
操作系统在虚拟化:是传统操作系统和用户位置之间的抽象层,在单个物理服务器和OS实例上创建容器,以利用数据中心的硬件和软件
eg:创建虚拟环境
在函数层进行虚拟化(不用虚拟化整个操作系统了,减少工作量)
在应用层做虚拟化,是最经典的虚拟化
将应用程序虚拟化为虚拟机
优点:最高的应用程序隔离
缺点:性能低,应用灵活性低,实现复杂
从这里看出,还是硬件虚拟化的效率最高
完全虚拟化:不需要修改GOS
半虚拟化:需要修改GOS
虚拟化与半虚拟化相比
注意服务器的定义:一个进程,在特定的传输地址上来等待传入服务请求
服务器的类型:
lterative:一次只能处理一个
Concurrent:同时处理多个请求
集群,之前在系统体系里也提到了,属于集中式架构
在这里分成三层
第一层:利用负载平衡器分发请求
第二层:服务器集群
第三层:与数据打交道
为什么要进行代码迁移?
答:把代码从重载移到轻载上,减小通信成本,有些时候可以把代码移到数据服务器上,而不是把数据移到代码服务器上,因为代码一般很大,数据一般很小