泻药
你想得很好
先回答你的问题,就是多个servlet是根据业务划分的
比如结账买单是一个servlet处理,客户预约是另外一个servlet处理
但是servlet container/e.g. tomcat, resin, undertow都是通过多个线程并发访问这些servlet对象
这就引出一个问题,就是并发问题
其实在ejb里面,有一个保证,就是任何时候,都只会有一个线程在访问该对象
用这种方式保证object内部整体线程安全,这样你在写代码的时候
就可以肆无忌惮地把数据存在对象里面,而不用担心有并发问题
但是servlet这个组件并不是这么定义的,所以你不能把状态存到组件对象中去
会有并发问题,所以你要写出pure function,把doget dopost做成pure function
不能有副作用哈哈,spring也是这么搞的,spring的所有component缺省都是singleton
所以这就是一个麻烦的问题,而这个问题在akka,ejb,vert.x,乃至node里面,都不存在
换句话说,他们都实现了一个单线程的运行环境,可以把状态积存到对象属性中去
就spring相关的component就有这个问题
所以单实例多线程模式就是一个错误的,已经开始凸显其过时的模式
当然在早期,那种内存数量有限,对象都要数着用的年代,这个还有点意义
但是在今天,动不动上g的内存的前提下,我们需要节省这一点对象吗?
我们用vert.x爆1w/s的请求,1c1g的烂机器都不去节省这点内存