线程池

最近在看线程池以及池化相关的技术,整理了一些线程池相关的东西。 线程池 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一 … 继续阅读

序列化以及序列化协议

序列化 序列化(serialization、marshalling)的过程是指将数据结构或者对象的状态转换成可以存储(比如文件、内存)或者传输的格式(比如网络)。反向操作就是反序列化(deserialization、unmarshalling)的过程。 更直白一点: * 序列化: 将数据结构或对象转换成二进制串的过程 * 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程 JS … 继续阅读

show processlist查看正在执行的SQL语句

最近遇到MySQL 报警,cpu突然飙高的情况,上去想看看是什么原因,运维找了过来。这个过程接触了 show processlist,于是整理和记录一下。 MySQL使用show processlist查看正在执行的SQL语句,通过show processlist查看正在执行的sql的情况以及及时kill死锁的SQL,通过EXPLAIN分析需要优化的sql语句。 命令行登录MySQL mysql … 继续阅读

零拷贝

什么是零拷贝 零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。 操作系统的零拷贝 非零拷贝的拷贝过程: 零拷贝的拷贝过程: 如何减少数据拷贝的次数呢?一个很明显的着力点就是减少数据在内核空间 … 继续阅读

MySQL DAL架构演化

1.优化sql和索引 2.缓存 memcached,redis; 3.读写分离 就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护; 4.分区表 针对分区表做优化,SQL条件中要带上分区条件的列 5.垂直拆分, 将一个大的系统分为多个小的系统,也就是分布式系统; 比如,原来的一个db包含了:user相关业务 … 继续阅读

SQL优化

SQL优化在日常开始比较常见,又非常重要,网上很多的教程,抽空整理了一下。 SQL 优化 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库 … 继续阅读