A simple, static web site is just some HTML files that a server sends out when a browser requests them, but when you write a web app that generates pages dynamically, the HTML sent to the browser is just what a program run by the web server generates as output. This program is invoked when someone asks the server for a page. Since the program doesn't continue running after generating the page to be served, web apps typically use a database backend to maintain persistent state (who's logged in, what they've posted, what privileges they have, etc.). If you have a lot of users active at once, the web server will have a bunch of threads operating at once, so there's potential for serious race condition issues.