浅谈wsl
本文简单介绍了WSL的工作原理。
介绍Windows Subsystem for Linux(WSL)是一个用于在本地运行linux二进制可执行文件(ELF格式)的兼容层。
在软件工程领域,兼容层是一个允许面向旧或异质系统的二进制文件运行在特定主机系统上的接口。这意味着将面向异质系统的系统调用转换为面向主机系统。有些库会面向异质系统,这通常是为主机系统提供运行异质二进制文件的能力。而硬件兼容层工具允许硬件仿真。
与虚拟机相比,wsl没有虚拟硬件的过程,而是直接在windows上虚拟一个linux内核,模拟linux系统调用,以运行linux执行文件。
可以简单的将它理解为可以运行linux可执行文件的、类似于powershell的shell,具有互操作性(在linux中执行windows命令,在windows中执行linux命令)。
虚拟机技术的原理
HypervisorHypervisor(虚拟机管理器)是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设 ...
GORM学习笔记
GORM的特性:
全功能 ORM
关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
Create,Save,Update,Delete,Find 中钩子方法
支持 Preload、Joins 的预加载
事务,嵌套事务,Save Point,Rollback To Saved Point
Context、预编译模式、DryRun 模式
批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
复合主键,索引,约束
Auto Migration
自定义 Logger
灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
每个特性都经过了测试的重重考验
开发者友好
模型模型是标准的struct
例如:
1234567891011type User ...
go-协程
协程是一种用户态的轻量级线程,又称微线程,协程的调度完全由用户控制。与传统的系统级线程和进程相比,协程的最大优势在于其”轻量级”,可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万的。这也是协程也叫轻量级线程的原因。
1.1 Goroutine创建Goroutine的成本很小,它就是一段代码,一个函数入口。以及在堆上为其分配的一个堆栈(初始大小为4K,会随着程序的执行自动增长删除)。因此它非常廉价,Go应用程序可以并发运行数千个Goroutines。
与线程相比,Goroutines非常便宜。它们只是堆栈大小的几个kb,堆栈可以根据应用程序的需要增长和收缩,而在线程的情况下,堆栈大小必须指定并且是固定的
Goroutines被多路复用到较少的OS线程。在一个程序中可能只有一个线程与数千个Goroutines。如果线程中的任何Goroutine都表示等待用户输入,则会创建另一个OS线程,剩下的Goroutines被转移到新的OS线程。所有这些都由运行时进行处理,我们作为程序员从这些复杂的细节中抽象出来,并得到了一个与并发工作相关的干净的API。
当使 ...
go-垃圾回收
常见的垃圾回收机制引用计数对每个对象维护一个引用计数,当引用该对象的对象被销毁或更新时被引用对象的引用计数自动减一,当被引用对象被创建或被赋值给其他对象时引用计数自动加一。
缺点:
降低性能
循环引用
标记-清除该方法分为两步:
标记从根节点开始迭代遍历所有被引用的对象,对能够通过应用遍历访问到的对象都进行标记为“被引用”;
清除操作。对没有被标记的内存进行清除操作。
缺点:
启动垃圾回收时会暂停当前所用代码的执行。
分代收集分代收集的基本思想是,将堆划分成两个或者多个称为代的空间。新创建的对象存放在称为新生代中,随着垃圾回收的重复执行,生命周期较长的对象会被提升到老年代中,因此,新生代垃圾回收和老年代垃圾回收两种方式共存,分别对其空间中的对象进行垃圾回收。新生代垃圾回收的速度非常快,比老年代快几个数量级,即使新生代垃圾回收的频率更高,执行效率也仍然比老年代垃圾回收强,这是因为大多数对象的生命周期都很短,根本无需提升到老年代。
Go的GCgo的垃圾回收机制是标记-清除算法。
标记阶段。获取这些对象的状态信息。
清扫阶段。回收状态为unreachable的对象。
三色标记 ...
MYSQL学习笔记
关系模型主键在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。
对于关系表,有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。
联合主键关系数据库实际上还允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。
外键12FOREIGN KEY (class_id)REFERENCES classes (id);
多对多多对多关系实际上是通过两个一对多关系实现的,即通过一个中间表,关联两个一对多关系,就形成了多对多关系:
teachers表:
id
name
1
张老师
2
王老师
3
李老师
4
赵老师
classes表:
id
name
1
一班
2
二班
中间表teacher_class关联两个一对多关系:
id
teacher_id
class_id
1
1
1
2
1
2
3
2
1
4
2
2
5
3
1
6
4
2
索引索引是关系数据库中 ...