黄小华的个人网站
熬过无人问津的日子才有诗和远方!
IO底层实现原理
BIO BIO B指的是blocking的意思,就是阻塞。服务端开发使用ServerSocket绑定端口号后, 程序就会监听该端口,等待accept事件,accept方法会阻塞当前主线程 当服务端收到accept事件时,程序就会拿到一个客户端与当前服务端连接的Socket。通过该Socket服务端可...
2020-09-22
线程池学习笔记
1 线程池的优势 (1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗,提高性能; (2)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; (3)方便线程并发数的管控。因为线 程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且...
2020-08-21
通过问题深入了解Redis
1.Redis单线程处理请求为啥性能这么高?(10万QPS) (1) 单线程操作(CPU不需要创建/销毁线程,避免上下文切换,无并发资源竞争的问题,减少锁的消耗)。 (2) redis的底层数据结构做了很多优化,设计巧妙,数据存储类似于HashMap的,读写操作都是O(1)的时间复杂度 (3) Re...
2020-08-14
直插并发编程深处AQS
AQS(AbstractQueuedSynchronsizer)抽象的队列式同步器。 AQS中维护了一个volatile int state(共享资源,该数管理整个队列)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列(双向链表)CLH队列)。 这里volatile能够保证多线程下的可...
2020-08-02
深入理解操作系统原理
线程与进程的区别 进程是操作系统进行资源分配的基本单位 线程是CPU调度的基本单位。 进程有自己独立的逻辑上连续地址空间。线程基本不拥有系统资源,只有一点运行必不可少的资源(程序计数器,一组寄存器,线程栈),所有线程共享进程所拥有的资源。 线程间通信效率高,开销小,进程间通信系统开销大,效率差。线程...
2020-07-30
Lua数据结构
Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等,在Lua中都可以通过table来表示。 一、数组 在lua中通过整数下标访问表中的元素即可简单的实现数组。并且数组不必事先指定大小,大小可以随需要动态的增长。 a = {} for i = ...
2020-07-21
lua学习
一、Lua简介及应用 想像你住在一栋装潢完毕的别墅里,却可以通过手中的平板任意修改房间布局、家具摆放和色彩格调,只要有足够的资源和强大的架构手段,将别墅变成巴比伦空中花园也未尝不可能。 Lua就是类似于你手中平板一样的工具。 Lua设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功...
2020-07-21
Lua语法练习
题目一、给一个表,表里有5个数,在[0-13]之间,其中0可以表示任意数,判断这个表是否连续? 思路: 连续的条件: 1、表中都是0 2、表中有4个0 3、0个数不大于3,经过排序之后除去0之外,最大值减去最小值的差小于5 注意:要排除掉除去0之外的数里面有相同的数 local list = {0...
2020-07-15
Mysql主从同步
1 master,记录数据更改操作 启用binlog日志 设置binlog日志格式 设置server_id 2slave运行2个线程 Slave_io:复制master主机binlog日志文件里的sql到本机的relay-log文件里 Slave_sql:执行本机relay_log文件里的sql语...
2020-07-07
MySql调优
SQL调优学习笔记 SQL优化的5个方面 1.服务器硬件性能(机械硬盘换固态硬盘) 2.MySql服务器优化 3.SQL语句本身优化 4.反范式设计优化(阿里规范) 5.索引优化 3 通过日志找到总时间最慢的几个查询 mysql可以查询到记录所有查询执行时间超过loog-query-time参数设定...
2020-06-30