A fully parallel stack runs in a preemptive multiprocessor environment. It uses locks to protect its integrity, and is prepared for:
1.The service procedures of two or more of its queues running concurrently
2.Its service and put procedures running concurrently with and/or preempting each other
3.Multiple instances of an open or close procedure running concurrently on different queues.
4.All put procedures to be called at DISPATCH_LEVEL processor priority. At this priority level, no page faults may be taken and procedures may not block. All dynamic memory should be allocated from non-paged pool.
STREAMS limits service procedures to one instantiation per queue at any given moment. For optimal throughput, a stack should do as much work as possible in its put procedures.
Service, open, and close procedures are guaranteed.
Additionally, open and close procedures are serialized along a stream. Thus, at any particular time, only one module or driver along that stream is executing an open or close procedure.