首页 > 编程知识 正文

总效率较高的一般是,进程间通信效率最高的是

时间:2023-05-06 02:10:26 阅读:38978 作者:3043

#管道(pipe

)管道采用半双工方式,数据只能单向流动,只能在有血缘关系的过程之间使用。 进程的亲缘关系通常是指父子进程关系。

#有名的管道(named pipe ) :

有名的管道也是半双工通信方式,但允许没有亲缘关系的进程之间进行通信。

#信号(semophore ) :

信号是控制多个进程访问共享资源的计数器。 这经常用作锁定机制,防止一个进程访问共享资源时其他进程也不访问该资源。 因此,它主要成为进程之间以及同一进程内不同线程之间的同步手段。

#消息队列(消息队列) :

消息队列是消息的链表,存储在内核中,由消息队列标识符标识。 消息队列克服了消息传递信息少、只能包含管道未格式化的字节流、缓冲区大小受限等缺点。

#信号(sinal )信号是一种比较复杂的通信方式,用于通知接收进程发生了事件。

#共享内存(共享内存) )

:共享内存是指映射由一个进程创建但可以由多个进程访问的另一个进程访问的内存。 共享内存是最快的IPC

方式专门针对其他进程间通信方式的执行效率低而设计。 这往往与其他通信机制(如信号2 )协作,实现进程之间的同步和通信。

#插座(插座) :

套接字也是进程间通信机制,与其他通信机制不同,可以用于不同的进程间通信。

1、管道:扎根于文件系统,只能在管道边读、边写,在亲子进程之间共享。 父子进程具有相同的文件标签(内核中file数组的下标),但指向的file结构不同) file结构与具体进程相关。 而file结构又指向一个dentry结构,该dentry结构相同,dentry结构又指向一个inode结构(以上均在内核中)。 父进程发送消息,系统从用户状态转移到内核状态,内核调用I节点结构中的函数操作指针,具体函数实现由虚拟文件系统下的具体文件系统实现,数据存储在I节点结构的缓存中内核找到子进程的task_struct结构,并添加标志以通知子进程已发送数据,子进程由阻止进程准备好。 父流程进入就绪阶段。 内核根据调度算法找到了流程的执行。 不久,选择子进程执行,并且类似的进程找到inode结构并读取缓存数据。 至此,完整的进程通信完成。

2、命名管道:匿名管道基于同一文件软盘找到对方,命名管道基于同一文件名。 因此,只要预约文件名就可以进行通信。 找到file结构后,过程很相似。 它植根于虚拟文件系统。 与块文件和字符文件不同,命名管道是特殊的文件系统FIFO队列,因此无法找到指针。

3、信号:信号时为异步通信方式。 一个进程向另一进程发送信号,系统从用户状态进入内核状态,内核根据接收进程的id找到task_struct,并将发送的信号放入接收进程队列。 在一些时间之后,执行接收过程,并在运行一段时间后,由于接收过程需要使用内核服务,因此它通过系统调用(异常或中断)进入内核状态,内核首先找到该过程的信号队列处理完成后,再次进入内核状态,找到信号处理前的命令,一切恢复正常,就像没有信号处理一样。 信号处理程序和主程序看起来像两个不同的线程,共享进程的用户空间,但无法同步。 信号处理程序不能在中断执行块后再进入主程序的执行。 信号处理程序的优先级高,但指向条件苛刻。

4,共享内存:共享内存实际上是不同进程的同一物理页。 虽然虚拟存储器地址不同。 甲进程将数据写入共享内存,乙进程也可以访问。 共享内存可以不参与内核操作,但需要同步和通知控制。 例如,可以通过信号实现通知。

5、消息传递:与管道通信不同,每个过程都有消息队列,每个消息都是结构化数据。 相反,管道只是文字的流动。 当管道的通信缓冲区已满时,将阻止发送过程,并且不会发送消息。 消息不是植根于文件系统的。

6、信号:用简单的通信方式访问另一个存储器时,检查一个信号是否可以访问,访问,关闭,使同一时间只有一个进程可以访问这个存储器。 就这样……。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。