GMP模型
- G:即
goroutine协程,每个Go关键字都会创建一个协程,协程在当创建的时候大约只占2MB,在不断的运行中可以按需增大(最大1GB)和缩小。 - M:即操作系统线程,Go中默认最多创建10000线程,同时每个Go协程都需要M上才能运行。
- P:即调度器,负责将协程调度到线程上,默认数量为CPU核心数,每一个M都与一个P对应。
在JDK6的时候引入了JSR269的标准,即 Pluggable Annotation Processing API (可插入注解处理API),简称APT。它提供了在编译时期改变一些行为的相关API,例如生成一些新的JAVA文件。
大致处理流程如下图,APT在编译成class文件时执行,在这个过程中可以自定义相关行为,例如生成新的源文件(MapStruct),修改AST语法树(Lombok),直到所有编译处理器都没有在对JAVA文件进行修改为止,才会走到后续的生成Class文件的流程。
