Java能抵挡住JavaScript的进攻吗?(2)
“确实受到了它的启发, 但是我的Node.x在架构和一些关键的抽象上和Node.js有很大不同。” 蒂姆不好意思地笑了笑,“先说说相同的部分,既然都是异步操作,那肯定是通过事件驱动的,所以都有一个事件循环。” IO大臣之前和Swing大臣聊过, 知道事件循环是怎么回事,这是一个相当古老的概念了。 无非就是有个线程在检测一个队列,如果队列中有事件,就拿出来处理。 “只不过我这里有所不同,可以创建多个事件循环出来,比如每一个CPU核心有一个,这样可以充分利用CPU的多核性能。” 蒂姆得意地说道。 (4个CPU core, 4个事件循环) IO大臣点头表示赞许, 他听说Node.js好像只有一个主线程,没法直接利用多核的能力。想利用多核的话还得开多个进程才行。 异步操作 “你图中的那个Hanlder就是具体的业务代码所在地吧? 具体长什么样子啊,让我看看!” IO大臣问道。 蒂姆赶紧呈上代码,这是简单的Hello World。
这段代码生成了一个简单的HTTP 服务器, 在8080端口监听, 每当有请求来的时候,都返回一个字符串“Hello World!”。 IO大臣一看,大为吃惊:“你这代码不需要外部容器,自己就搞了一个HTTP服务器啊?” “是的,这样我们就完全不用Tomcat了。 我把这种类起来一个名称,叫做Verticle, 部署以后,这个Verticle就可以和一个事件循环关联了。每次有HTTP请求过来,Node.x会封装成事件,然后分派给它处理了。” 真是个二愣子, IO大臣心想, 怪不得Tomcat对你不待见,你这个东西出来,他的位置不保啊! IO大臣问道:“那对于数据库查询,你这个Handler,哦不,Verticle该怎么写? 查询数据库这么慢,岂不是把事件循环都阻塞了?什么事情都做不了了?” “大人您忘了,我们这里操作必须都是异步的,查询数据库也不例外。” 蒂姆说着展示了一段代码, 通过异步的方式来查询数据库。
IO大臣感慨道:“唉,老了,真是不中用了,连异步都忘了。对了,这些个Verticle看起来都是独立的,是被不同的线程调用的,他们之间怎么进行交互啊?难道也通过共享内存的方式?” (编辑:ASP站长网) |