September 4, 2018
IO多路复用机制详解(转)
"服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:\n(1)同步阻塞IO(Blocking IO):即传统的IO模型。\n(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。\n(3)IO多路复用(IO Multiplexing):即经典的 反应器Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。高性能并发服务程序使用IO多路复用模型+多线程任务处理的架构。\n(4)异步IO(Asynchronous IO):即经典的 Proactor设计模式,也称为异步非阻塞IO。不经常用。\n高性能I/O设计模式Reactor和Proactor: https://blog.csdn.net/xiongping_/article/details/45152333\nselect、poll、epoll之间的区别(搜狗面试)\n转自: …"
August 28, 2018
[译]Go里面的unsafe包详解
"unsafe包位置: src/unsafe/unsafe.go\n指针类型: ***类型:**普通指针,用于传递对象地址,不能进行指针运算。 **unsafe.Pointer:**通用指针,用于转换不同类型的指针,不能进行指针运算。 **uintptr:**用于指针运算,GC 不把 uintptr 当指针,uintptr 无法持有对象。uintptr 类型的目标会被 GC 回收。\nunsafe.Pointer 可以和 普通指针 进行相互转换。 unsafe.Pointer 可以和 uintptr 进行相互转换。 也就是说 unsafe.Pointer 是桥梁,可以让任意类型的指针实现相互转换,也可以将任意类型的指针转换为 uintptr 进行指针运算。\n一般使用流程: 第一步:将结构体 -\u0026gt; 通用指针unsafe.Pointer(struct) -\u0026gt; uintptr(通用指针)获取内存段的起始位置start_pos,并记录下来,第二步使用。 第二步:使用start_pos + unsafe.Offsetof(s.b) -\u0026gt; 将地址转为能用指 …"
August 28, 2018
golang中slice切片理解总结
"首先我们对切片有一个大概的理解,先看一下slice的内部结构,共分三部分,一个是指向底层数组的时候,一个是长度len,另一个就是slice的容量cap了。如cap不足以放在新值的时候,会产生新的内存地址申请。\n先看代码\npackage main import \u0026#34;fmt\u0026#34; func main() { // 创建一个切片,长度为9,容量为10 fmt.Println(\u0026#34;----- 1.测试切片变量append的影响(未申请新的内存空间)-----\u0026#34;) a := make([]int, 9,10) fmt.Printf( \u0026#34;%p len=%d cap=%d %vn\u0026#34; , a, len(a), cap(a), a) // 切片进行append操作,由于原来len(a)长度为9,而cap(a)容量为10,未达到扩展内存的要求,此时新创建的切片变量还指向原来的底层数组,只是数组的后面添加一个新值 // 此时一共两个切片变量,一个是a,另一个是s4。但共指向的一个内存地址 s4 := append(a,4) fmt.Printf(\u0026#34;%p …"
August 20, 2018
MySQL中的innodb_file_format 配置项解读
"一:innodb_file_format参数 在 innodb 1.0.6版本之前,innodb文件格式innodb_file_format只有 Antelope(Antelope 文件格式支持Redundant,Compact两种格式来存放行记录,Redundant是为了兼容之前版本而保留的。在mysql 5.1版本中,默认设置为Compact,用户可以通过 show table status like 'table_name'来查看表使用的行格式row_format)\n从innodb 1.0.6开始引入了新的文件格式 Barracuda 在原来的基础上(Antelope)新增了Dynamic和Compressed两种行格式。\n二:innodb_file_format如何使用 一般, innodb_file_format 在配置文件中指定;row_format则在创建数据表时指定:\nCREATE TABLE test2 (column1 INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=Compressed KEY_BLOCK_SIZE=4; …"
August 16, 2018
MySQL 5.6新特性MRR
"**一、什么是MRR ** MMR全称是Multi-Range Read,是MYSQL5.6优化器的一个新特性,在MariaDB5.5也有这个特性。优化的功能在使用二级索引做范围扫描的过程中减少磁盘随机IO和减少主键索引的访问次数。是优化器将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手段。(参考: https://blog.csdn.net/caomiao2006/article/details/52205177)\n**二、MRR和没有MRR的区别 ** 给出一个简单的例子,在innodb表执行下面的查询:\nSELECT non_key_column FROM tbl WHERE key_column=x\n在没有MRR的情况下,它是这样得到结果的:\n1. select key_column, pk_column from tb where key_column=x order by key_column —\u0026gt; 假设这个结果集是t\n2. for each row in t ; select non_key_column from tb where …"