I don't recall the exact details, but in Firefox you can configure the number of processes, otherwise it will create them up to a limit relative to the number of cores available (or virtual cores, a.k.a., threads). The browser gets a process, the render engine gets one, the script engine gets one, etc.
If I run into a badly behaving site, some tabs will crash, but not the browser as a whole, so I just have to hit the refresh/reload button to fetch the page again (i.e., the tabs are still there with the URL of the page prior to the tabs crashing).