首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

两阶段提交查看全文
两阶段提交.png
两阶段提交(2PC)是分布式事务的一种实现方案。

两阶段提交协议把分布式事务分成两个过程,分别是准备阶段和提交阶段,准备阶段和提交阶段都是由事务管理器(协调者)发起,资管管理器(事务参与者)接收协调者的指令完成事务的执行动作。 两阶段具体分工如下: 准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写redo或者undo日志(这也是前面提起的Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。 提交阶段:如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源。 普通事务的提交也包括写数据阶段和提交阶段,例如Mysql的InnoDB引擎在提交之前,会写入undolog,修改BufferPool,在事务提交的时候会写入redolog。两阶段提交会将提交操作再分为两部分,例如准备提交的阶段会先准备写入redolog,之后写入binlog,再进行提交redolog。 准备阶段 两阶段事务的准备阶段,协调者会对所有的参与者发起准备的指令。 参与者接收到准备指令之后,进行事务操作,本环节的事务操作一般包括资源锁定,记录回滚日志(Undolog),执行成功会给协调者发送成功的返回,否则返回失败。 协调者收到所有参与者的返回都是成功时,而阶段提交会进入提交阶段。

协调者如果收到部分参与者的返回是失败的时候,则将成功的参与者进行回滚。…
快速排序查看全文
快速排序示意图.jpg
快速排序是计算机领域最经典的算法之一,简称快排,最早由 C.A.R.Hoare 提出。在平均状况下,排序n个元素要次比较O(nlogn)次。在最坏状况下的时间复杂度是O(n²),但这种状况并不常见。事实上,快速排序通常明显比其他算法更快,所以名字叫快速排序。

快速排序是分治思想的一个应用场景。 快速排序首先选择一个基准数,因为后面我们需要根据基准数,把所有代排序的数字分为比基准数大或者比基准数小两部分,大的位于右侧,小的位于左侧。所以基准数最好选择中位数附近的数字,当然由于我们事先并不知道中位数位于什么位置,根据随机理论,中位数出现在任何一个位置出现的概率均相等,所以我们一般选择第一个或者最后一个数字作为基准数。 假如选择第一个数字作为基准数,那我们首先使用最后一个数字和基准数比较,我们使用aj表示,如果该数字比基准数大,则该数字应该位于基准数的右侧,则不做任何处理,j的位置左移一位,如果该数字比基准数小,该数字会位于基准数左侧,所以将该数字和基准数交换。 当基准数交换到右侧之后,我们从左侧继续和基准数比较,当然刚才交换过来的数字已经明确比基准数小,所以我们从被交换过来的位置i+1之后进行比较,同理,如果比基准小则右移一位,反之则和基准数交换。 从上述流程中我们可以分析出来以下特点: 快速排序每次移动一位,或者是右侧左移一位,或者是左侧右移一位。 移动的过程或者伴随着基准数和其他位置数字的交换。 快速排序过程中,基准数的左侧和右侧始终有一侧保持着全部比基准数小或者全部比基准数大的状态。 快速排序会在左侧指标大于等于右侧指针的时候结束一轮循环,而此轮循环结束之后,基准侧左侧的所有数字均小于基准数,右侧反之。

每轮循环结束之后,基准数左侧部分和右侧部分都分别进行以上操作…
KVM查看全文
Kvm基本架构.png
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。

KVM是Linux的一部分,Linux 2.6.20及以上版本都包含KVM,因此KVM可以使用Linux最新内核的功能。 现代CPU在硬件层面提供对特殊指令的接获和重定向,通过这些指令集,VMM很容易将客户机置于受限模式运行,一旦宿主机访问物理资源,硬件会把控制权交还给VM处理,利用硬件的虚拟化技术,VM还可以重定向后的指令发给宿主机进行执行。 KVM将Linux转为虚拟机监控程序,由于KVM是Linux内核的一部分,所以作为虚拟机必须的组件,例如内存管理,进程调度,输入输出,网络堆栈都直接拥有。KVM虚拟机进程和普通的Linux进程一样,由标准的Linux进程调度程序进行调度,并且使用专门的虚拟硬件,例如网卡,CPU等。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。 综上所述,KVM虚拟化有两个核心模块: KVM内核模块:主要包括KVM虚拟化核心模块KVM.ko,以及硬件相关的KVM_intel或KVM_AMD模块;负责CPU与内存虚拟化,包括VM创建,内存分配与管理、vCPU执行模式切换等。

QEMU设备模拟:实现IO虚拟化与各设备模拟…

热门分类

算法题库

精选内容