摘要:
1、前言 在Java中如果需要定时执行某些任务,可以使用java.util包提供Timer和TimerTask,在后台线程中调度任务。 简单来说,TimerTask是要执行的任务,Timer是调度程序。 2、运行一个定时任务 使用Timer的来运行一个定时任务 @Test public void t 阅读全文
摘要:
1、RPC服务 从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架。 1.1、RPC架构 一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件 阅读全文
摘要:
结论:进程切换比线程切换慢。 每个进程都拥有一个自己的虚拟地址空间,并且独立于其他进程的地址空间。进程切换会涉及到虚拟地址空间的切换,而这正是导致进程切换比线程切换慢的原因所在! 虚拟地址转换为物理地址需要两个东西:CPU 上的 MMU 和内存中的页表。每次访问内存,都需要进行虚拟地址到物理地址的转 阅读全文
摘要:
1、看如何查看系统的上下文切换情况 vmstat 5 其中跟本文相关的比较重要的几列的含义: r:正在运行和等待CPU的进程数 b:处于不可中断睡眠状态的进程数 in:每秒中断次数 cs:每秒上下文切换次数 us:用户进程占用的cpu sy:系统进程占用的cpu 接着使用pidsta工具观察cpu上 阅读全文
摘要:
1、InnoDB 体系架构 在说 WAL 之前,有必要简单介绍下 InnoDB 存储引擎的体系架构,方便理解下文,并且 redo log 也是 InnoDB 存储引擎所特有的。如下图,InnoDB 存储引擎由内存池和一些后台线程组成: 2、内存池 先来解释下内存池。 首先,我们需要知道,InnoDB 阅读全文
摘要:
1、前言 Mysql为了解决并发、数据安全的问题,使用了锁机制。可以按照锁的粒度把数据库锁分为表级锁和行级锁。 表级锁:Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单 ,资源消耗也比较少,加锁快,不会出现死锁 。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 阅读全文
摘要:
一个 SQL 执行的很慢,分两种情况讨论: 一、大多数情况下很正常,偶尔很慢,则有如下原因 (1)、数据库在刷新脏页,例如 redo log buffer写满了需要同步到磁盘。 当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在内存中把对应字段的数据更新了,但是更新之后,这些 阅读全文
摘要:
软优化 优化子查询:在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高。 分解表:对于字段较多的表,如果某些字段使用频率较低,此时应当,将其分离出来从而形成新的表。 阅读全文
摘要:
1、MySQL基本结构分析 1.1 、基本框架 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 如上图所示,MySQL服务器逻辑架构从上往下可以分为三层: (1)第一层:处理客户端连接、授权认证等。 (2)第二层:服务器层,负责查 阅读全文
摘要:
1、前言 Redis4.0版本之后开始使用多线程,之前使用的是单线程。无论是使用单线程模型还是多线程模型,这两个设计上的决定都是为了更好地提升 Redis 的开发效率、运行性能。虽然 Redis 在较新的版本中引入了多线程,不过是在部分命令上引入的,其中包括非阻塞的删除操作,在整体的架构设计上,主处 阅读全文