这里说一下node.js中的单线程缘由还是基于前段时间公司内部培训同事提出的问题:在网络通讯编程中,按照以往的语言或平台,应对成百上千的socket连接时,往往都会利用多线程的特性,对每个连接开启子线程分别接收数据再处理。那么在node.js中它是单线程,是基于事件响应的,即将每个的连接、处理事件会放到一个事件队列里面依次处理。那么问题来了,同事说如果某一个连接上来以后,一直在给服务器发送数据,那么排在事件队列后面的连接怎么处理,会一直等待吗?这个当然不是,下面我先用一个例子来说明一下这个问题的答案,方便理解。
我们准备模拟这样一个场景:一个客户端向服务器发起tcp连接,成功之后,客户端一直给服务器发送数据,而服务器收到数据后只是作一个回显。然后,我们再用一个客户端向该服务器发起tcp连接,同样发送数据,这时看服务器会不会因为接收上一个连接的持续发送数据,而不能去处理第二个tcp连接的数据发送。