Question: I've read recommendations that we should create separate application pools for each asp.net application on our Win2008 server. 

We have about 20 apps that would be on the same server. I know this would create 20 separate worker processes which seems very wasteful.

Is it good practice to create separate application pools for each application?

Answer: 
yes, it is a good idea even for 20 applications.

1. Security. Different app pools running under different accounts.
2. Isolation. One crashing app won't take down other apps.
3. Memory (if you are running 32bit). Each app pool will have its own address space. Thus you can address much more memory than a maximum of approximately 2.7GB of usable space for 1 process.
4. You may choose to periodically restart one not-so-well behaving app without affecting other applications.
The main benefit of creating different application pools is that you can provide each pool with other credentials. Your 20 applications may communicate with 20 different databases that all need another login. The best practice then is to run each application using a different service account.

I wouldn't worry too much about performance. Most time will probably be spent inside each web application, no matter what process each application is in.