在通信原语的设计中,阻塞原语、非缓冲原语以及非可靠原语存在的问题是什么?这些问题是如何解决的?

admin2016-12-23  30

问题 在通信原语的设计中,阻塞原语、非缓冲原语以及非可靠原语存在的问题是什么?这些问题是如何解决的?

选项

答案调用阻塞原语(即同步原语)时,无论send还是receive都不立即返回控制,而是处于阻塞状态。在send的情况下,当消息被发送后,调用进程被阻塞,直至消息完全发送完成在这段时间缓冲区不能使用。同样,在receive的情况下,也并不返回控制,而是等到把消息实际接收下来并把它放入缓冲区。阻塞原语的最大问题是,调用进程在阻塞期间,如果没有其他进程可以运行,CPU只能空转。这就是说,使用阻塞原语的最大缺点是效率低,缺乏连续并行计算的能力。 解决这一问题的办法是采用非阻塞原语,即异步原语。有两种形式的异步原语: (1)带副本的异步原语,由内核把消息复制到内核缓冲区,然后允许调用进程运行。其缺点是CPU时间花费在额外的消息复制上。 (2)带有中断的异步原语,当消息发送完毕后,中断发送进程,通知发送进程此时缓冲区可用。这种异步原语的缺点是,它给程序员编程带来了困难。 非缓冲区原语的最大问题是,接收进程无法处理过早到达的消息。接收进程对接收到的消息要进行必要的处理,处理这些消息要花费一些时间,否则到达过多的消息因来不及处理,就会造成消息丢失。 解决这一问题的办法是:一个希望接收消息的进程要告诉内核为它创建一个信箱,即采用缓冲原语。 不可靠原语不能保证消息被对方正确接收。为解决这一问题可使用可靠原语。 可靠原语,要求在客户与服务器之间传送四条消息。 ①客户向服务器的请求; ②服务器内核到客户内核的确认; ③服务器对客户的应答; ④客户内核到服务器内核的确认。

解析
转载请注明原文地址:https://jikaoti.com/ti/4AWaFFFM
0

最新回复(0)