It had two levels of persistence.  There was a database layer for long term, persistent storage.  But the clever(?) part was that the C threads persisted (in memory) beyond each single HTTP request.  e.g. you could create a calculator web app where you would press buttons and have the calculator display numbers, and all that would be handled (across multiple requests) by a single C thread.  The calculator display might be stored in a stack variable.<p>Of course you can imagine ways for this to fail - restarting the webserver wasn&#x27;t very nice for your users for example.  Also you needed a smart front end which would direct user sessions back to the same web server instance.  (And since it used cooperative threads, each core would be running a separate web server -- but this was 15 years ago when multicore machines were not too common).