You can structure your application as a series of process pools exchanging through queues with any depth. Although it can get hairy pretty quickly (probably due to the need to switch context).
This is not erlang, although it is for sure.
Multiprocessing documents are extremely useful.
Here (a little too much to add a comment) is some code that I use to increase the bandwidth in a program that updates my channels. I have one survey of processes for feeds that need to be extracted, which leads to a queue of 4 working groups receiving these results and retrieving feeds, and the results (if any) are then queued for the Pool process to parse and put in line to return to the database. Executed sequentially, this process will be very slow due to the fact that some sites use their sweet time to react, so most of the time the process expected data from the Internet and would use only one core. Within this process-based model, I actually expect the most in the database, and my NIC is saturated most of the time, and all 4 cores actually do something. Your mileage may vary.
source share