1. A method for processing packets, the method comprising: distributing a plurality of packets to a plurality of packet processing engines while maintaining order of one or more streams of packets using one or more ordered locks, said distributing including distributing a particular packet of the plurality of packets to a particular packet processing engine of the plurality of packet processing engines with the particular packet being associated with a particular identifier of a particular ordered lock of said one or more ordered locks; in response to the particular packet processing engine completing processing of the particular packet, attaching a gather instruction to the particular identifier and releasing the packet processing engine to be able to process another packet or perform another function; and performing the gather instruction in response to the particular ordered lock being acquired by the particular identifier, said gather instruction causing the processed particular packet to be sent; wherein said releasing the packet processing engine is performed prior to said performing the gather instruction.