provides a bi-directional, reusable channel for transmitting objects between two ends of a forked process