2018-12-06

以后有些的再日更技术贴,没有啥就写个简短的记事。
今天从新捡了一些以前的Unix环境高级编程的东西,好多都忘得差不多了。学过的还是应该系统性的重新复习一遍为好,总结下。

进程

IPC:

  • 无名管道(PIPE)
  • 有名管道(FIFO)
  • 消息队列(Message Queue)
  • 共享内存 (Shared Memory)
  • 信号 (Signal)
  • 信号量(Semaphore)
  • 内存映射(Memory Map)
  • 套接字(Socket)

线程

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。因为进程地址通过分页机制,在物理上隔离了的。才有需要进行数据交换的通信机制,而线程共享同一个进程空间,类似同一线程组的线程互相自带共享内存属性。

而同一进程的不同线程共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段,所以线程之间可以方便、快速地共享信息。只需要将数据复制到共享(全局或堆)变量中即可。不过,要避免出现多个线程试图同时修改同一份信息。

2018-12-06_第1张图片
线程执行内存模型

线程间同步:

由于线程间共享公共资源,在同一映射的内存空间。线程切换的消耗时间很小,并发性可以做到很大。主要在线程间做同步与互斥操作,常见的同步互斥有:

  • 互斥锁
  • 读写锁
  • 条件变量
  • 信号量
  • 自旋锁

参考资料:

  • linux基础——linux进程间通信(IPC)机制总结
  • linux基础——linux线程间通信及同步机制总结

你可能感兴趣的:(2018-12-06)