深夜时分,忙碌了一天的机房里逐渐安静下来,几个软件巨头nginx, Tomcat, Redis, Node.js又开始夜谈了。
nginx伸了一个懒腰:哎哟,今天可累死我了,高峰期我居然维持了上万个连接,人类可真会压榨我啊,就给我这么一台破机器!
Tomcat :得了吧老弟,我知道你用的epoll很厉害, 但是你只是“维持”了连接而已,通过这些连接发过来的数据请求,你一个都不管,都分给我们Tomcat集群了,我们才是真苦逼啊!
Tomcat :唉,我也没法管啊,他们俩停下里休息,还不是遇到了耗时的操作住了!不等着怎么办啊, 我的机器CPU只有4个核心,同一时刻只能有4个线程仆人能执行,操作系统老大要对他们做轮换, 总得有人歇着, 要是有100个CPU核心就好了。
Redis :别做梦了,怎么可能有100个核心 ! Tomcat 兄, 你看看我这里只有一个线程仆人在处理对缓存的读写请求,不也干得好好的, 你瞧瞧我这个仆人是怎么干活的,多勤快!
Tomcat :看到了吧,0x7954还得歇着喝茶。本质就是任务太耗时,阻塞住了, 还得用多个线程来处理!
Node.js 半天没吭声,这时候跳了出来 :Tomcat兄,此言差矣, 任务太耗时,也可以用单线程啊!你把它搞成异步的不就行了!
Tomcat : 异步异步超级线程0x7954遇到了访问数据库的任务,很耗时,他不歇着还能怎么办bsp;
Node.js:简单啊,执行下一个任务!但是,在执行之前,要给0x7954安插一个回调函数,等到数据库返回数据了,通知0x7954执行这个回调函数,处理返回数据不就行了!
Tomcat :听起来不错啊,一个线程就把所有的事情做完了,还不用歇着 !
Node.js:是啊是啊,我一直就是这么干的,这就叫“单线程,非阻塞IO,事件循环”
Tomcat很羡慕这种方式,他又思考了一会儿,发现了问题。
Tomcat : 不对啊,如果想用单线程,那所有的I/O操作都必须是非阻塞的,如果有一个不是,那我唯一的仆人就没法去干别的事情了。
Node.js:嘿嘿,Tomcat兄台还是挺厉害的嘛,我会尽最大的努力使用非阻塞的方式来处理所有的I/O ,对于那些实在搞不定的 ,比如Linux文件I/O,DNS,CPU密集型的任务如加密,压缩等,嘿嘿,我就用个线程池!
宇宙第一IDE到底是谁p>
Node.js :我只需要一个店小二
HTTP Server :一个差生的逆袭
我要穿越,干翻“烂语言”JavaScript
如何降低程序员的工资p>
程序员,你得选准跑路的时间!
两年,我学会了所有的编程语言!
一直CRUD,一直996,我烦透了,我要转型
字节码万岁!
上帝托梦给我说:一切皆文件
Javascript: 一个屌丝的逆袭
我是一个线程
TCP/IP之大明邮差
一个故事讲完Https
CPU 阿甘

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!