以后有些的再日更技术贴,没有啥就写个简短的记事。
今天从新捡了一些以前的Unix环境高级编程的东西,好多都忘得差不多了。学过的还是应该系统性的重新复习一遍为好,总结下。
进程
IPC:
- 无名管道(PIPE)
- 有名管道(FIFO)
- 消息队列(Message Queue)
- 共享内存 (Shared Memory)
- 信号 (Signal)
- 信号量(Semaphore)
- 内存映射(Memory Map)
- 套接字(Socket)
线程
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。因为进程地址通过分页机制,在物理上隔离了的。才有需要进行数据交换的通信机制,而线程共享同一个进程空间,类似同一线程组的线程互相自带共享内存属性。
而同一进程的不同线程共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段,所以线程之间可以方便、快速地共享信息。只需要将数据复制到共享(全局或堆)变量中即可。不过,要避免出现多个线程试图同时修改同一份信息。
线程间同步:
由于线程间共享公共资源,在同一映射的内存空间。线程切换的消耗时间很小,并发性可以做到很大。主要在线程间做同步与互斥操作,常见的同步互斥有:
- 互斥锁
- 读写锁
- 条件变量
- 信号量
- 自旋锁