java NIO
jdk1.7中提供了
Object.equals
,Object.hashCode
方法非常方便。
传统的socket分析
1 | public class BIOServer { |
以上的代码有2个地方阻塞:ServerSocket.accept
和InputStream.read
。当我们启动上述server,一旦有一个客户端连接到server,server就会阻塞,从而以后的客户端想要连接到server都不会打印”a new client connected”。一种常见的解决方案是创建一个新的handler线程,每个客户端连接的时候都创建一个新的线程为其服务,就好比一个餐厅每来一个客人都安排一个服务生,资源消耗非常大。所以传统的socket是无法实现长连接的服务器的,但是用短连接还是比较合适的,老版本的tomcat就是基于socket,因为http的问答机制,不会出现线程一直被一个客户端占用的情况,一个线程可以为多个客户端服务。
传统的socket单线程情况下只能为一个客户端服务,用线程池的情况下可以为多个客户端服务,但是资源消耗太大。
微服务
daily build很痛苦,每次commit都需要跑一个较大的CI,很耗时。让小的和频繁的升级成为可能,应用架构更加弹性可伸缩(横向拓展的一个重要目标就是无状态)。微服务带来的一个挑战是我们面对的不仅仅是一个应用,而是多个应用,有点像分布式系统。
为什么nginx比apache性能高很多
nginx采用事件驱动的epoll模型,而apache采用select轮询机制(类似于死循环)。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 雨碎江南!