蓝冠注册《Q374919》假设您有两个进程:一个服务器和一个客户机。服务器进程从硬件接口读取一些I/O,并将数据传递给客户端进程。这些进程可能运行在独立的处理器上,也可能不运行。
假设您有两个进程:一个服务器和一个客户机。服务器进程从硬件接口读取一些I/O,并将数据传递给客户端进程。这些进程可能运行在独立的处理器上,蓝冠官网 也可能不运行。特别是,它们没有公共的共享内存区域。
在这种情况下,服务器和客户机之间必须通过某种显式管道进行通信。根据系统的不同,这种通信机制可以以不同的方式实现。
该系统的服务器部分可以运行类似以下伪代码的代码:
客户端部分可以按照以下代码模式运行:
在这种情况下,服务器初始化通信,客户端等待并响应通信。因此,服务器是主服务器,客户端是从服务器。这可能是意料之中的,蓝冠注册 因为整个过程是由数据到达硬件接口驱动的。
到目前为止,很简单。然而,如果考虑到时间需求,事情就变得有点复杂了。根据系统的需要,两个进程之间的协议可能必须更复杂。
阻塞行为和缓冲
假设通信管道本身只有有限的缓冲,服务器进程中对send_data_to_client()的调用将被阻塞—它将一直等到客户机准备好。如果客户端及时准备好,并且在需要从硬件读取下一项数据之前可以进行数据通信,那么这是很好的。
但是,如果不是这样,并且客户端太慢,那么来自硬件的下一个数据将会丢失。
有许多不同的方法可以绕过阻塞问题。如果硬件有某种类型的流量控制,它可能会延迟接口并将延迟推入数据流上游。但有时这是不可能的。
本文剩下的部分将讨论以下情况:没有流程控制,客户机的拉动时间可变,硬件的推动时间固定。在这种情况下,蓝冠 常见的解决方案是为数据使用缓冲区。
有了缓冲区,服务器进程从硬件接口读取数据并把数据放在fifo中。客户端进程要求服务器提供来自fifo另一端的数据。缓冲区需要足够大,以应付在客户端最长处理时间内可以到达的数据量。