消息块

STREAMS 消息由一个或多个链接的消息块组成。 即,消息的第一个消息块可以附加到属于同一消息的其他消息块。

例如,由于处理将头或尾数据添加到消息中包含的数据,或者由于消息缓冲区中的大小限制导致数据跨多个块,可能会发生消息中的多个块。 当消息由多个消息块组成时,第一个块的消息类型确定整个消息的类型,而不考虑附加消息块的类型。

STREAMS 将消息作为包含特定大小的缓冲区的单个块进行分配。 如果消息的数据超过包含数据的缓冲区的大小,那么该过程可以分配包含更大缓冲区的新块,将当前数据复制到该块,插入新数据,然后取消分配旧块。 或者,该过程可以分配额外的 (较小的) 块,将新数据放入新消息块中,并在初始消息块之后或之前将其链接。 两种替代方法都产生一条新消息。

当过程处理消息时,消息可以独立存在。 或者,消息可以在 QUEUE 中的消息链接列表 (称为 消息队列) 上等待处理。 在 "消息队列" 图 (图 1) 中,消息 1 链接到消息 2。

图 1。 消息队列
此图显示左侧由消息 1 边界的队列头。 消息 1 中的消息块 (类型) 有一个双向箭头连接到队列头,还有另一个双向箭头连接到消息 2 中的消息块。 在此消息块 (类型) 下方,箭头指向另一个消息块,而该块又指向消息 1 区域中的另一个消息块。 最低的消息块具有指向向下的箭头。 在消息 1 的右侧,是消息 2。 双向箭头退出右侧的消息块 (类型) 并继续下一条消息。 在消息 2 的消息块 (类型) 下方,箭头指向消息块。 该消息块具有指向向下的箭头。

当消息排队时,消息的第一个块除了包含指向消息的第二个块 (如果存在) 的链接外,还包含指向同一消息队列上的前消息和后消息的链接。 消息队列头和尾部包含在 QUEUE 中。

STREAMS 实用程序例程使开发者能够处理消息和消息队列。