一、堆和栈

栈是一种先进后出的数据结构,是由操作系统分配的,是规整的,分配和释放都由操作系统完成,使用方便
堆的使用比较自由,由程序员自己分配,容易产生内存碎片,访问速度比较慢
栈在一级缓存中,堆在二级缓存中,所以一般栈访问更快
一级缓存主频和cpu相同,更高效,但是容量小,价格贵

二、进程和线程

进程就是一个运行的程序,是系统资源分配的基本单位
线程是cpu调度的基本单位
一个线程不拥有资源,他们拥有的资源都是属于进程的,但是不同的线程的运行栈和程序计数器是独立的
进程切换开销大于线程

三、进程间通信方式

1.管道

管道是半双工工作方式,数据只能单向流动,通常用于父子进程之间。
例如项目中的canal连接mysql到ElasticSearch

2.信号量

用于多个进程对共享资源的访问,类似于锁机制

3.信号

类似于中断机制,或者监听器,用于通知某个进程事件的发生

4.消息队列

是传递消息的链表,克服了传递消息少,消息没有格式的缺点

5.共享内存

是最直接最快的通信方式,例如Nginx中master进程和worker进程之间的访问

6.套接字

可以用于不同设备间的通信