消息队列(Message Queue)是一种在不同组件或进程间进行异步通信的机制,它允许应用程序以松耦合的方式交换消息。消息队列就像一个缓冲区,发送者将消息放入队列,接收者从队列中取出消息进行处理。以下为你详细介绍消息队列:
特点
- 异步通信:发送者和接收者无需同时在线,发送者将消息放入队列后可以继续执行其他任务,接收者在合适的时候从队列中获取消息。
- 解耦:发送者和接收者不需要直接交互,降低了系统间的耦合度,提高了系统的可维护性和可扩展性。
- 削峰填谷:在高并发场景下,消息队列可以作为缓冲区,缓解瞬间的流量压力,保证系统的稳定性。
- 顺序保证:部分消息队列能够保证消息的顺序性,确保消息按照发送的顺序被处理。
信号量:
基本概念
信号量本质上是一个计数器,它维护着一个整数值。这个整数值表示当前可用的资源数量。信号量支持两种基本操作:
- P 操作(wait):也称为 “等待” 或 “获取” 操作。当一个线程或进程需要访问共享资源时,它会执行 P 操作。执行 P 操作时,信号量的值会减 1。如果减 1 后信号量的值小于 0,则线程或进程会被阻塞,直到有其他线程或进程释放资源。
- V 操作(signal):也称为 “释放” 或 “通知” 操作。当一个线程或进程使用完共享资源后,它会执行 V 操作。执行 V 操作时,信号量的值会加 1。如果加 1 后信号量的值小于等于 0,说明有其他线程或进程正在等待资源,此时会唤醒一个等待的线程或进程。
关于信号量为什么是通信?
答案:就是因为通信不仅仅只有通信数据,进程之间的协同也是一种!
1.进程必须识别+能够处理信号----信号没有产生,也要具备处理信号的能力,属于进程内置功能的一部分。
2.进程即便是没有收到信号,也能知道那些信号该怎么处理。
3.当进程真的收到了一个具体的信号的时候,进程可能并不会立即处理这个信号,合适的时候才会处理。
4.一个进程必须当信号产生,到信号开始被处理,就一定会有时间窗口,进程具有临时保存那些信号已经发生了的能力。
键盘是基于中断给cpu发送信息的,而cpu记录数据其实是对cpu进行充放电的过程
用户输入命令,在shell下启动一个前台进程,用户按ctrl-c,这时键盘输入会产生一个硬件中断,被os捕获,从而把这个中断解释成为信号发送给目标前台进程,前台进程因为收到这个信号,进而引起进程退出!
信号与进程之间是异步通知的方式,称为软中断!
信号的产生:
- 键盘组合键:Ctrl+c 2、Ctrl+\3
- Kill命令:kill+signo
- 系统调用:
要知道OS是进程管理者,只有它有资格才能修改task_strcut内部属性!!!