title: How to make my nodejs app serve multiple users?
body: <p>I am implementing a very basic website using nodejs, and expressjs framework. The idea is that the user enters the website, click on a button that will trigger a cpu-intensive task in the server, and get a message on the browser upon the completion of the task.</p>
  
  <p>The confusing part for me is how to accomplish this task for each user without blocking the event-loop, thus, no user has to wait for another to finish. Also, how to use a new instance of the used resources(objects, variables..) for each user. </p>
  
  <p>After playing and reading around, I have come across child-process. Basically, I thought of forking a new child_process for each user so that whatever the time the sorting takes, it won't block my event-loop. However, I am still not sure if this is the best thing to do for such a scenario. </p>
  
  <p>Now, I have done what I wanted to but with only single user, however when trying to start another user, things become messy and variables are shared. I know that I should not use global variables declared in the module, but what could be another way to make variables shared among functions within a single module yet they are different for each user!?</p>
  
  <p>I know that the question may sound very basic, but I kinda miss the idea of how does node js serve different users with new variables, objects that are associated with each individual user. </p>
  
  <p>In short, my questions are:
  1- how does node serve multiple users simultaneously?
  2- when and how should I resort to forking or executing a new child-process under the hood, and is it for each user or based on my # cores in cpu 
  3- how to separate resources in my application for each user such that each user has his own counters, emails and other objects and variables. 
  4- when do I need or I have to kill my child process. </p>
  
  <p>Thanks in advance.</p>
  
  <p>CODE:</p>
  
  <pre><code>var cp = require('child_process');
  var child= cp.fork('./routes/mysort-module');
  
  exports.user=function(req,res){
      // child = new cp.fork('./routes/mysort-module'); // Should I make new child for each user?
      child.on('message',function(m){ res.send('DONE');}
      child.send('START PROCESS'); // Forking a cpu-intensive task in mysort-module.js
  
  }
  </code></pre>
  
  <p>IN MY SORTING MODULE:</p>
  
  <pre><code>var variables = require(...);
  //GLOBAL VARIABLES to be shared among different functions in this module 
  process.on('message',function(m){
      //sort cpu-intensive task
      process.send('DONE');
  });
  // OTHER FUNCTIONS in THE MODULE that make use of global variables.
  </code></pre>