why is performance of redis+socket.io better than just socket.io?

I earlier had all my code in socket.io+node.js server. I recently converted all the code to redis+socket.io+socket.io+node.js after noticing slow performance when too many users send messages across the server. So, why socket.io alone was slow because it is not multi threaded, so it handles one request or emit at a time. What redis does is distribute these requests or emits across channels. Clients subscribe to different channels, and when a message is published on a channel, all the client subscribed to it receive the message. It does it via this piece of code:

sub.on("message", function (channel, message) {
  client.emit("message",message);
});

The client.on('emit',function(){}) takes it from here to publish messages to different channels.

Here is a brief code explaining what i am doing with redis:

io.sockets.on('connection', function (client) {
var pub = redis.createClient();
var sub = redis.createClient();
sub.on("message", function (channel, message) {
    client.emit('message',message);
});
client.on("message", function (msg) {
if(msg.type == "chat"){
    pub.publish("channel." + msg.tousername,msg.message);
    pub.publish("channel." + msg.user,msg.message);
}
else if(msg.type == "setUsername"){
  sub.subscribe("channel." +msg.user);
}
});

});

As redis stores the channel information, we can have different servers publish to the same channel.

So, what i dont understand is, if sub.on("message") is getting called every time a request or emit is sent, why is redis supposed to be giving better performance? I suppose even the sub.on("message") method is not multi threaded.