If you only deal with perfect, bug-free code, chances are you may not need a multi-process architecture.

Most real world projects need to cope with ever changing requirements, code written by third parties and a wide range of user inputs. A multi-process architecture helps you achieve manageable reliability by containing potentially dangerous (impure) sections of code: user input, dealing with third-party interfaces, etc.

Moreover, concurrent programming is becoming more important as parallel processing becomes the norm. However, with traditional multi-threaded programming, the program's flow becomes exponentially more difficult to understand. An error in thread synchronization will result in a catastrophic failure. A multi-process architecture helps improve the situation using "fail-fast" approach: if something goes wrong, just kill the process.