在使用 EJB 的时候,我们知道对于 EJB 的无状态 SessionBean , EJB 容器是提供的池化管理,这样能够处理大并发的性能问题,
在使用 Spring 的时候,其 Bean 的默认配置是单例模式, 但 Spring 的优势似乎不在解决大并发访问上,
那么我想知道的是,对于 EJB 的池化管理与 Spring 的单例模式来比较,他的大并发处理优势体现在哪里?
我的理解:
我理解不了他们的本质上有什么区别, 如果说是使用单例(类中没有同步问题), 那么多个用户访问的是'同一份'内存中的字节码,
对于使用池化管理,那么多个用户访问的是不同实例的'同样内容'的存在内存中的字节码,那么处理内存中的'同一份'字节码,与处理内
存中的多个不同实例的'同样的内容'字节码相比,他们的差别在哪里?
请各位大虾帮帮小弟, 这个问题困扰我很久了, 想破头都没想通如何解释.....
在使用 Spring 的时候,其 Bean 的默认配置是单例模式, 但 Spring 的优势似乎不在解决大并发访问上,
那么我想知道的是,对于 EJB 的池化管理与 Spring 的单例模式来比较,他的大并发处理优势体现在哪里?
我的理解:
我理解不了他们的本质上有什么区别, 如果说是使用单例(类中没有同步问题), 那么多个用户访问的是'同一份'内存中的字节码,
对于使用池化管理,那么多个用户访问的是不同实例的'同样内容'的存在内存中的字节码,那么处理内存中的'同一份'字节码,与处理内
存中的多个不同实例的'同样的内容'字节码相比,他们的差别在哪里?
请各位大虾帮帮小弟, 这个问题困扰我很久了, 想破头都没想通如何解释.....
多线程的局部变量是隔离的理解, Spring 采用的 ThreadLocal 理解 我的问题重心是在与 单例模式 与 池化技术他们在并发访问的时候, 池化技术的性能优势是如何体现的; 因为对于多人访问"同一个对象实例的方法",与多人访问"多个实例的同样方法", 我不理解他们的本质区别在哪...(不都是内存中的那块字节码吗?)
Thanks for the above answers.
而单例还是非单例,本身对运行效率(如果代码线程安全)没有任何影响
单例的方法调用会队列, 这个还没想过,例如 Tomcat 接受到并发请求,会触发多个线程来处理访问, 如果此时使用单例模式也是同一个对象的多线程访问,多线程他们应该是存在竞争关系吧,竞争CPU的时间,我觉得和队列没什么关系;
单例也仅仅是 new 一次, 像 Spring 的 IOC 容器,其会在容器初始化的时候就将对象初始化,所以在访问的时候不会存在 new 的过程了;
请问这个排队是指什么? 线程级别? 争抢时间片? 如果这样 池化的时候,多线程调用不同的实例的方法,这个时候也是在争抢时间片啊.....对一对象的一个方法的调用,如果没有 synchronized 是不会有对队列那种形式的等待的吧