单线程服务器与多线程服务器

nodejs的事件环非阻塞模式是单线程服务器的典例,这种服务器适合于大量异步操作的业务,比如服务器响应时间主要是io时间,这样高并发下,再多的线程也无法解决io耗时,这样的业务场景响应瓶颈不在服务器这一层,那就把所有的io用一个线程(足够了)全部塞进事件队列就完全ok了,节约了服务器代码的资源开销。

另一种便是多线程的应用场景,这个耗时不在异步事件,而在于服务器逻辑代码,比如我们进行一个在线复杂计算器的任务,服务器对于提交的积分算式进行计算,耗时1min,100个并发,单线程的话就需要100min,这个时候就需要开多线程响应,毕竟我们有多个cpu等候差遣,但是这样就能保证不阻塞了吗,不是的,服务器资源耗尽后,还是会有很多请求被阻塞掉,因为服务器能开的最佳线程数目是有限的,而开关线程是非常耗时的事情,因此可以根据预测维护一个线程池,保持一定的线程,超过这个最优线程数目范围后就阻塞请求。而线程池类似的概念还存在于数据库的连接池。

除了用线程池,还有一种叫nio的方法来用单线程或者非常少的线程