笔试真题 | 进程线程以及通信
进程与线程
1.进程间的通信方式
-
管道
管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,可分为无名管道和有名管道,用于具有亲缘关系进程间的通信。有名管道克服了没有名字的限制,因此允许无亲缘关系进程间的通信。
特点
①只能在有亲缘关系的进程之间进行通信,也就是在父子进程之间通信
②单向通信,一个读端,一个写端。如果要双向通信就要建立两个管道
③接收数据流,与数据格式无关
④一般而言,进程退出时管道即被释放,因此管道的生命周期会随进程的关闭而消亡
⑤同步互斥原则,内核会对管道操作进行同步和互斥
-
信号
信号机制是UNIX系统中最为古老的进程之间通信机制。它用于一个进程或多个进程之间传递异步信号,来通知进程有某种事件发生,除了用于进程间通信外,使用信号还可以使进程发送信号给进程本身。
-
消息队列
消息队列是内核地址空间中的消息的链表,通过Linux内核在进程之间传递内容。消息顺序地发送到消息队列中,并以几种不同的方式从队列中获取,每个消息队列可以用IPC标识符唯一的进行标识。不同的消息队列之间是相互独立的,每个消息队列中的消息构成一个独立的链表。有写权限的进程可以对消息队列添加消息,有读权限的进程可以对消息队列读取信息
特点
①消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限的缺点。消息队列 是基于消息的,而管道是基于字节流的,且消息队列的读取不一定先入先出
②消息队列中每个消息的最大长度是有上限的,每个消息队列的总的字节数也是有上限的,系统上消息队 列的总数也有一个上限
-
共享内存
共享内存是在多个进程之间共享一块内存区域的一种进程间的通信方式,它是通过在多个进程之间对内存段进行映射的方式来实现共享内存的,是进程间通信最快捷的方式,之所以最快,是因为共享内存方式的通信没有中间过程,而管道、消息队列等方式则是需要将数据通过中间机制进行转换。共享内存往往与其他通信机制(如信号量)结合使用,来达到进程间的同步及互斥
特点
①共享内存就是允许两个不相关的进程访问同一个内存
②共享内存是两个正在运行的进程之间共享和数据的最有效的方式
③共享内存不提供任何互斥和同步机
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!