自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

转载 IO模式 epoll详解

参考链接一参考链接二复用技术:在单条信道上处理多个时间,用单个线程处理多个事件。这里所说的IO主要指的是网络IO,在Linux中一切皆文件,因此网络IO常用文件描述符fd表示。select、epoll对比用户态将文件拷贝入内核态的方式select:创建三个描述符集合并拷贝入内核,分别监听读、写、异常动作。受到单个进程(select线程)可以打开fd数量限制,默认是1024;epoll:执行epoll_create函数会在内核的高速cache区建立红黑树和就绪链表(存储已经就绪的文件描述符

2021-08-12 15:16:47 476

转载 golang 内存逃逸分析

参考链接一抛一个问题:都知道Go的方法参数如果传递结构体的值,那么会在栈中发生拷贝,而如果传递指针,那么结构体是否会逃逸到堆上,增加gc压力?那么值传递和指针传递谁的效率高呢?JVM逃逸是在运行时逃逸分析实现:在一个方法中,如果局部变量的引用会传出栈帧,就会发生逃逸。public void test(){ List<Integer> a = new ArrayList<>(); a.add(1); // a 未发生逃逸,因此在栈上分配}public Lis

2021-08-06 14:42:41 183

原创 Go并发编程模型 GPM

Go的并发支持包是runtime。Go不推荐使用共享内存的形式通信,而推荐使用channel(通道),还有一些传统的通信方式:互斥量、条件变量等。GMP详解G:goroutine。一段Go代码M:machine。一个M代表一个内核线程,或称工作线程P:processor。执行一个goroutine所必须的资源(简称上下文)一个M和P组合成了G运行环境(内核线程+上下文),每个P都有一个G队列1、M内核线程。在没有足够的M关联P并运行P中可运行的G时会创建,系统监控或垃圾回收也会创建。M的结

2021-08-05 16:29:19 206

原创 linux:内核态和用户态、进程切换、进程间通信(IPC)方式及特点 协程和线程

内核态和用户态是CPU权限的两个等级,也称为系统空间和用户空间:CPU处于内核态时,可以使用任何指令集、访问一切硬件资源。CPU处于用户态则会有访问限制。这样的好处是分而治之,用户不能随意修改操作系统内核态的资源,有保护的作用。用户态->内核态1、系统调用,内核态申请系统调用切换到内核态2、异常:用户态发生异常,切换到内核态由相关程序处理异常3、外围设备中断:若当前出于用户态,接到中断就会切换到内核态处理...

2021-08-05 11:52:45 976

原创 go channel实践+源码分析

Go语言支持用channel实现goroutine间通信。定义channel的三种方式 // 创建无缓冲管道 ch1 := make(chan interface{}) // 有缓冲区的管道,缓冲区大小为size的值,需要注意的是,当sie=0,创建的是无缓冲管道 size := 10 ch2 := make(chan interface{}, size) // var ch3 chan interface{}若没有设置缓冲,hchantype hchan struct { q

2021-08-04 17:17:49 165

转载 golang的内存管理

虚拟内存空间:堆区和栈区栈区:函数调用的参数、返回值、局部变量,这部分内存由编译器管理堆区:堆中的对象由内存分配器分配,垃圾收集器回收内存管理的三个组件:用户程序、分配器、收集器用户程序通过分配器在堆上初始化内存空间分配方法线性分配器、空闲链表分配器1、线性分配:只需维护指针缺点:无法在对象释放后重用该空间2、空闲链表分配可重用被释放的内存,内部维护空闲链表(数据结构),用户程序申请内存时会遍历链表找到足够大的内存块类似策略:隔离适应,将内存划分为多个内存块大小不同的链表,单个链表

2021-07-29 15:00:00 670

原创 go map sync.Map

map的两个关键点:hash函数、冲突解决冲突解决开放寻址法:底层是数组,hash、取模后发现当前index不为空,则向后遍历找到空的插入拉链法:数组加链表、红黑树等type hmap struct { //元素数量 count int flags uint8 //桶的数量 B uint8 noverflow uint16 hash0 uint32 //下面两个都是bmap数组,每个bmap可存储8个键值对 buckets unsaf

2021-07-27 15:46:16 322

原创 ArrayList、HashMap添加元素+扩容

class ArrayList<E> extends AbstractList<E>{ /** * 默认的初始容量(数组长度) */ private static final int DEFAULT_CAPACITY = 10; /** * 尚未初始化的数组 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 无参构.

2021-05-16 16:42:38 188

转载 HTTP/HTTPS协议 HTTP1.0、1.1、2.0区别 浅谈HTTP3.0和QUIC

-------------------------HTTP/HTTPS----------------1、http资源由urls确定2、方式:get:从服务器获取数据,但不改变服务器状态post:----------------,要求更新服务器资源3、get是幂等的,多次访问效果相同;post不需要幂等,一样的post请求会产生不同的结果4、Http明文传输,因此不安全;Https基于TLS协议5、Https作用:验证客户端/服务端是否合法、报文加密、验证数据完整性6、http无状态,不记录

2021-03-11 15:31:39 947

原创 go tag标签

tag(标签)的作用是对字段的解释说明,可以通过反射的方式获取字段的标签内容标签既可以是字符串,也可以是 key:value (例如json.Marshal就用到了这个形式)import ( "fmt" "reflect")type Person struct { // 字符串形式 Name string `a b c` Age int64 `dasjhfas` // key:value Class string `json:"class" a:"class-a" b:"c..

2022-02-26 14:40:38 949

原创 《Linux内核设计与实现》之进程

文章目录1 进程1.1 两个虚拟化1.2 任务队列1.3 task_struct1.4 进程家族树1.5 进程创建1.5.1 fork() 函数2 线程2.1 线程的创建2.2 内核线程1 进程进程=程序+资源,资源包括打开的文件、内核内部数据、CPU状态、挂起的信号Linux不特意区分线程和进程(二者都由task_struct结构体表示),线程是一种特殊的进程1.1 两个虚拟化现在操作系统中,进程提供两种虚拟机制:虚拟内存和虚拟处理器。虚拟内存:实际上是使用硬盘补足进程的内存,一般电

2022-01-14 16:19:16 794

原创 mysql:innodb存储引擎之表结构

innodbinnodb有一个内存池,内存池的作用为:维护进程/线程所需访问的数据结构、缓存磁盘数据、redo log缓冲区~~后台线程的作用为:刷新内存池的数据、将已修改的数据文件刷新到磁盘、保证数据库异常时innodb恢复到正常状态下图为innodb结构体系...

2022-01-07 19:05:08 1125

原创 linux:task_struct进程状态 僵尸进程 孤儿进程

文章目录Task_struct状态僵尸进程孤儿进程Task_struct状态状态描述task_running R就绪状态,或正在运行,进程的task_struct出现在一个CPU的可执行队列task_interruptible S可中断的睡眠状态,例如进行socket、等待信号量等,task_struct放在某个事件的等待队列task_uninterruptible D与task_interruptible类似,不常用且很短暂,区别是这个状态下不响应异步信号,例如k

2021-09-12 22:22:18 350

转载 cookie session token

文章目录Cookiecookie作用Session分布式session策略Cookie和Session区别Cookie和Session关联Token(JWT)参考链接Cookie服务器发送到浏览器,并保存在浏览器端,浏览器请求服务端时会带上cookie。cookie作用会化状态管理(登录信息、购物车信息等)个性化设置(用户自定义设置、主题等)浏览器跟踪行为(跟踪分析用户行为)Sessionsession存储于服务端,用于存储用户和服务端一次会话的过程,用户关闭会话或者服务端sess

2021-09-08 17:35:59 67

原创 socket与TCP time_wait复用 连接队列

文章目录网络进程间如何通信socket基本函数socket使用TCP建立连接过程time_wait作用和复用作用复用Questions网络进程间如何通信消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、信号量)共享内存远程过程调用rpcsocket基本函数socket()int socket(int domain, int type, int protocol);用于创建一个socket描述符(类似于创建文件返回一个文件描述符)bind()int bind(in

2021-08-20 10:21:22 286

转载 namespace cgroups

namespaces和cgroup是容器的基础,二者都是Linux内核的特性,并不是只有容器可以使用它们。NamespaceLinux内核特性,自从2002年起,增加了许多的namespace类型。“Namespaces are a feature of the Linux kernel that partitions kernel resources such that one set of processes sees one set of resources while another set

2021-08-17 16:37:58 130

原创 go 垃圾回收

本文是对mgc.go开头一大段注解的翻译。golang的gc可以与mutator线程并发执行,而且允许多个gc线程并行。支持并发的mark和sweep,也会使用写屏障。按P来分配隔离的空间来减少碎片内存。gc的四个阶段sweep terminationa. 此过程会引发STW,所有的P都会到安全点safe-point;b. 回收未被回收的spans(内存管理单元),只有gc被强制开始才会有未被回收的spans;marka. 将gc状态从_GCoff改成_GCmark,让所有的P打开wr

2021-08-14 22:47:54 161

原创 go recover panic

参考链接panic立即停止当前函数的剩余代码,并在当前goroutine中递归调用defer方法。recover终止panic引起的程序崩溃。这是只能在defer中发挥作用的函数。func main() { defer func() { fmt.Println("main.defer1") }() defer func() { fmt.Println("main.defer2") }() test() time.Sleep(1*time.Second)}func test

2021-08-12 18:38:00 64

原创 go context

参考链接context:一般称为上下文,指的是一段程序的环境、资源。上和下可以指代goroutine。在网络编程中,一个Request可能会有多个goroutine处理,这些goroutine可以从context获取共享资源;同时Request结束时,所有的context也该结束,这也可以通过context实现。context包的核心为Context接口type Context interface { // 返回值中:time代表需要用到context的工作要结束了,该context也被取消;ok表

2021-07-28 11:15:13 71

原创 2021-02-23

TypeException: The alias ‘Collection’ is already mapped to the value ‘java.util.Collection’.bean目录下自定义的Collection与java.util.Collection重合

2021-02-23 17:39:58 139

原创 create connection SQLException

在ur了后面加上 ?serverTimezone=UTC

2021-01-03 20:48:36 2897

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除