The invention provides, in one aspect, a virtual processor that includes
one or more virtual processing units. These virtual processing units
execute on one or more processors, and each virtual processing unit
executes one or more processes or threads (collectively, "threads").
While the threads may be constrained to executing throughout their
respective lifetimes on the same virtual processing units, they need not
be. An event delivery mechanism associates events with respective threads
and notifies those threads when the events occur, regardless of which
virtual processing unit and/or processor the threads happen to be
executing on at the time. The invention provides, in other aspects,
virtual and/or digital data processors with improved dataflow-based
synchronization. A process or thread (collectively, again, "thread")
executing within such processor can execute a memory instruction (e.g.,
an "Empty" or other memory-consumer instruction) that permits the thread
to wait on the availability of data generated, e.g., by another thread
and to transparently wake up when that other thread makes the data
available (e.g., by execution of a "Fill" or other memory-producer
instruction).