很多书或者博客都说了进程间通信有几种方式,线程间通信有几种方式,我说一下进程间通信与线程间通信的本质以及要注意的问题。
1.一个进程如何把信息传递给另一个进程
2.确保两个或更多的进程在活动中不会出现交叉,比如,两个工作进程不会服务于一个任务进程, 一个工作进程也不会服务两个任务进程
3.正确的执行顺序,比如进程A为创建进程,进程B为消费进程, 则需要A进程先执行,B进程后执行
以上都是关于进程间通信的,而线程间通信其实也是一样的,毕竟对于Linux内核来说,线程就是共用地址空间的进程而已,因此除了传递消息的方式不一样之外,线程间通信和进程间通信没有区别,(在不同地址空间的线程间通信需要按进程间通信处理),因此线程的同步与执行顺序是更重要的
进程间通信方式:管道,有名管道,消息队列,信号量,共享内存,socket
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存
线程间通信方式:
线程间主要用来同步
线程的同步机制主要有:互斥量,信号量,条件变量