放置过程

put 过程是 QUEUE 例程,用于从流中的先前 QUEUE 接收消息。 消息由一个 QUEUE 中的过程在 QUEUE 之间传递,该过程调用以下 QUEUE 中包含的 put 过程。

在适当的方向上调用 put 过程通常是在模块之间传递消息的唯一方法。 (除非另有说明,否则术语 模块 意味着模块,驱动程序和流头。) 可推送模块中的 QUEUEs 包含放置过程。 通常,由于大多数流的全双工操作,在模块中有一个单独的读取和写入 QUEUEs 的放置过程。

放置过程与消息上的立即 (而不是延迟) 处理相关联。 每个模块都将相邻的 put 过程作为子例程访问。 例如,假设modA, modB,和modC是流中的三个连续模块,其中modC连接到流头。 如果 modA 接收到要在上游发送的消息,那么 modA 将处理该消息,然后调用 modB put 过程。 modB 过程处理消息,然后调用 modC put 过程。 最后, modC 过程处理消息,然后调用 stream-head put 过程。

因此,将在一个连续处理序列中沿流传递消息。 此序列具有在短时间内以低开销 (子例程调用) 完成整个处理的优点。 但是,如果此序列很长,并且在具有多个用户的系统上实现了处理,那么可能不需要使用此处理方式。 在这些情况下使用这种处理方式可能对该流有利,但对其他流不利,因为它们可能需要等待很长时间才能处理。

此外,在某些情况下, put 过程无法立即处理消息,但必须将其挂起,直到允许处理为止。 其中最典型的例子是一个驱动程序 (必须等到当前输出完成后再发送下一条消息) 和流头 (可能必须等到进程启动流上的 read 子例程)。