进程通信方式
管道/匿名管道(pipe)
- 管道的实质是一个内核缓冲区
会有哪些问题?怎么解决?
有名管道(FIFO)
- 先进先出(first in first out)
- 以有名管道的文件形式存在于文件系统中
会有哪些问题?怎么解决?
信号(Signal)
- 无需知道该进程的状态
- 阻塞进程
- 异步通信
会有哪些问题?怎么解决?
消息队列(Message Queue)
- 放在内核中的消息链表
- 允许一个或多个进程向它写入与读取消息
- 克服了信号承载信息量少缺陷
- 目前主要有两种类型的消息队列:POSIX消息队列以及System V消息队列,系统V消息队列目前被大量使用
会有哪些问题?怎么解决?
共享内存(share memory)
- 使得多个进程可以可以直接读写同一块内存空间,是最快的可用IPC形式
- 由于多个进程共享一段内存,因此需要依靠某种同步机制(如信号量)来达到进程间的同步及互斥
会有哪些问题?怎么解决?
信号量(semaphore)
- 信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步只能通过两个标准原子操作:wait(semap) , signal(semap) ;进行访问
- 信号量是非负整型变量
- 操作也被成为PV原语(P来源于荷兰语proberen"测试",V来源于荷兰语verhogen"增加",P表示通过的意思,V表示释放的意思)
会有哪些问题?怎么解决?
套接字(socket)
- 套接字是支持TCP/IP的网络通信的基本操作单元
- 套接字的特性由3个属性确定,它们分别是:域、端口号、协议类型。
两个进程互相同tcp通信需要几个channel?
协程通讯
- channel
- sync.Mutex互斥锁进行加锁通讯