happens-before原则
JMM核心概念。
JDK1.5开始,Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作(可以是在一个线程之内,也可以是在不同线程之间)之间必须要存在happens-before关系。
JMM核心概念。
JDK1.5开始,Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作(可以是在一个线程之内,也可以是在不同线程之间)之间必须要存在happens-before关系。
在执行程序时,为了提高性能,编译器和处理器通常会对指令做重排序,重排序分为3种类型:
《MySQL是怎样运行的 —— 从跟上理解MySQL》—— 第九章
表空间
是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd
的实际文件。
可以把表空间理解成被切分为许许多多个页
的池子,当想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。
《MySQL是怎样运行的 —— 从跟上理解MySQL》—— 第八章
InnoDB 、 MyISAM
这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。那么InnoDB
和MyISAM
这两个存储引擎的数据是如何在文件系统中存储的呢?
内核态(Kernel Mode):内核态运行的进程几乎可以访问计算机的任何资源包括系统的内存空间、设备、驱动程序等,不受限制,拥有非常高的权限。当操作系统接收到进程的系统调用请求时,就会从用户态切换到内核态,执行相应的系统调用,并将结果返回给进程,最后再从内核态切换回用户态。
用户态(User Mode) : 用户态运行的进程可以直接读取用户程序的数据,拥有较低的权限。当应用程序需要执行某些需要特殊权限的操作,例如读写磁盘、网络通信等,就需要向操作系统发起系统调用请求,进入内核态。
内核态相比用户态拥有更高的特权级别,因此能够执行更底层、更敏感的操作。不过,由于进入内核态需要付出较高的开销(需要进行一系列的上下文切换和权限检查),应该尽量减少进入内核态的次数,以提高系统的性能和稳定性。