NIO在Tomcat中的应用
对NIO的理解 个人单方面认为,NIO与BIO的最大区别在于主动和被动,使用BIO的方式需要等待被调用方返回数据,很明显此时调用者是被动的。 举个例子 阻塞IO 假设你是一个胆小又害羞的男孩子,你约了隔壁测试的妹子,但你并不敢主动约会,所以你把自己的手机号码给她,并暗示她想要约会的时候打电话给你。很明显此时你陷入了被动,约不约会的结果需要妹子主动告知你,如果她忘了,那么你要陷入长时间的等待中以及无尽的猜测和自我怀疑中(太惨了)。[如果你是一个胆小害羞又好色的男孩子,那就惨了] 非阻塞IO 我们知道,渣男通常有很多的备胎,我管这个叫做 备胎池(SpareTirePool) , 那么当他想要约会的时候,只要群发问妹子要不要约会,如果要约会的话就和妹子约会,约会结束之后,处理其他约会事件,如果没有继续下一次询问。在这个例子中约会可以视为IO事件,问妹子的过程可以视为备胎池的轮询。 如果你要学习NIO,可以 学习 Tomcat 如何使用NIO 既然是网络通信的I/O那必然有以下两个步骤 SeverSocket的启动 I/O事件的处理 关键代码在 package org.apache.tomcat.util.net.NioEndpoint 中 P.S. 文章太长,如果不想看可以直接阅读结论 ServerSocket的启动 在最开始看代码,是震惊的,真的,如果你看Reactor模型的话