容器技术专题 — 1.预备知识

1. 预备知识
2. 容器技术原理


1. 核心

  • 物理核:CPU中包含的物理内核(核心)个数,比如多核CPU,单核CPU。cpu cores记录了对应的物理CPU有多少个物理核;

  • 逻辑核:所谓的4核8线程,4核指的是物理核心。用Intel的超线程技术(HT, Hyper-Threading)将物理核虚拟而成的逻辑处理单元。用一个物理核模拟两个虚拟核,即每个核两个线程,总数为8线程;

  • 多核CPU:多核CPU是多个单核CPU的替代方案,多核CPU减小了体积,同时也减少了功耗。

2. 进程和线程

对比 进程 线程
定义 进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位 线程是进程运行和执行的最小调度单位
系统开销 创建撤销切换开销大,资源要重新分配和收回 仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码
拥有资产 资源拥有的基本单位 基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈)
调度 资源分配的基本单位 独立调度分配的单位
安全性 进程间相互独立,互不影响 线程共享一个进程下面的资源,可以互相通信和影响
地址空间 系统赋予的独立的内存地址空间 由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量
  • 线程切换:CPU给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。
  • 线程开销:上下文切换消耗、线程创建和消亡的开销、线程需要保存维持线程本地栈,会消耗内存。
  • 线程数量选择:计算密集型,CPU的利用率高,不用开太多的线程;IO密集型,因为IO操作会阻塞线程,CPU利用率不高,可以开多点线程。
  • java程序是跑在JVM实例上的。JVM本身是一个多线程的程序,当JVM启动执行时就是在操作系统中启动了一个JVM进程。我们编写的java单线程或多线程应用进程都是在JVM这个程序中作为一个或多个线程运行。
    JVM启动时,必然会创建以下5个线程:
    1. main:主线程,执行我们指定的启动类的main方法
    2. Reference Handler:处理引用的线程
    3. Finalizer:调用对象的finalize方法的线程,就是垃圾回收的线程
    4. Signal Dispatcher:分发处理发送给JVM信号的线程
    5. Attach Listener:负责接收外部的命令的线程

3. 虚拟化

  • 虚拟化(技术)(Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
    • 按虚拟的对象分类:虚拟机、虚拟内存、存储虚拟化、网络虚拟化等等;
    • 按照抽象程度分类:指令集架构等级的虚拟化、硬件抽象层等级的虚拟化、操作系统等级的虚拟化等等。
虚拟技术按抽象程度来分为五个层次
  • 虚拟机(Virtual machine或VM)可以像真实机器一样运行程序的计算机的软件实现。广义来说,虚拟机是一种模拟系统,即在软件层面上通过模拟硬件的输入和输出,让虚拟机的操作系统得以运行在没有物理硬件的环境中(也就是宿主机的操作系统上),其中能够模拟出硬件输入输出,让虚拟机的操作系统可以启动起来的程序,被叫做hypervisor。
虚拟机也被称为guest OS

虚拟机也被称为guest OS

  • 单纯模拟硬件的输入输出,效率是很差的。如果我们不模拟硬件输入输出,只是做下真实硬件输入输出的搬运工,那么虚拟机的指令执行速度,就可以和宿主机一致了。当然这前提是宿主机的硬件架构必须和虚拟硬件架构一致。
  • 在linux上模拟windows,这个windows的运行速度基本上和原生装一个windows速度差不多,因为windows也能被直接安装在电脑上。但对于在windows系统中运行android系统不管用,因为android系统的运行硬件一般是手机(arm系统,不同的硬件架构体系和cpu指令集),所以android模拟机还是一样的慢。
  • 其实我们创建虚拟机也不一定需要模拟硬件的输入和输出,假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为「操作系统层虚拟化」,也被叫做容器

你可能感兴趣的:(容器技术专题 — 1.预备知识)