进程间通信(一)

1. 为什么进程会共享内存

进程的用户空间是独立的,一般而言是不能互相访问的,唯一的例外是共享内存区

 

2. 进程间通信有什么不常用的方式

普通PIPE,PIPE,命名PIPE,消息队列,信号量,共享存储,UNIXSOCKET,UNIX数据包SOCKET

 

3. 无名管道与有名管道的优缺点

管道用于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作

FIFO可以说是管道的推广,克服了无名管道的克制,使得无亲缘关系的进程同样可以采用先进先出的通信机制进行通信

 

4. 有名管道与消息队列的区别是什么

消息队列:用于消息,不是简单的数据信息传递,消息队列还包括消息有优先级,消息到达通知等;

管道:低级的通信机制,消息队列比管道高级,无名管道和有名管道依然比较低级,完成高级的应用服务器还需要消息队列等

 

5. 为什么读写有名信道,要设置阻塞标志

对于阻塞写来说,写操作在写满FIFO的空闲区域后,会一直等待,直到写完所有数据为止,请求写入的数据的最终都会写入FIFO

 

6. 发送信号的主要函数的作用是什么

Kill:可以发送信号给信号和进程组,它不仅可以终止进程,也可以向进程发送其他信号;raise()函数允许进程向自身发送信号

Alarm()可以在进程中设置定时器,等到时间到达时,就会向进程发生SIGALARM信号,注意的是,一个进程只有一个闹钟;pause()直接将信号挂起直到捕捉到信号为止

 

7. 消息队列中读完后是否删除相对应的消息

后台数据存储是分文件存储的,已读完的数据文件将被清理,所以不会消耗存储资源。消息队列只缓存当前读和写的数据文件,性能不随数据量增大而下降。

 

8. 信号的局限在于?

这种通信可携带的信息极少,不适合需要经常携带数据的通信;

不具备同步机制,类似于中断,什么时候产生信号,进程是不知道的

 

9. 信号会不会丢失,在哪里丢失

在信号的生命周期里,当一个非实时信号发送给一个进程时,如果该信号已经在进程中注册,则该信号将被丢弃,造成信号丢失。因此,非实时信号又叫做“不可靠信号”

 

10. 无名管道的应用实例有哪些

SHELL中时常会用到管道,在这种应用方式下,管道的创建对用户来说是透明的

对于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作

猜你喜欢

转载自blog.csdn.net/wed312/article/details/78686773
今日推荐