1

使用原子整数作为注入控制器的服务类中的实例变量。缩放受限于每个线程运行操作所需的内存,以及每秒处理多少个请求(cpu 花费和对原子整数执行操作的时间?)

@Service
public MyService{

AtomciInteger count = new AtomicIntger(0);

 public int add() {
   return count.incrementAndGet();
 }

    // accessed via ajax loop (and controller), if value changes update display
  public int getCount() {
    return count.get();
  }
}

服务类将通过控制器访问,控制器将作为 RESTful Web 服务提供,通过 ajax 调用访问。它如何处理模拟用户/请求?

我能想到的唯一选择是使用休眠实体并将整数值存储为字段。让 hibernate 处理线程问题,其中 sessionfactory 将被注入到 dao 中,而 dao 被注入到服务类中——扩展问题?我的春季班都是单身人士。

4

1 回答 1

2

AtomicIntger尽可能快。阅读它(volatile领域)接近于阅读普通的int. 更新使用带有简单while循环的 CAS 操作,这不能更快和线程安全地完成。您正在使用 Spring(可能还有几层 AOP 方面,Spring MVC 控制器(具有大量反射),并且您通过 HTTP 协议调用它。递增和访问一个int是您的问题中最少的。

使用 Hibernate(即 JDBC)的唯一好处是跨多个服务器的可扩展性。然而,使用普通的 JDBC 和数据库序列代替 Hibernate - 速度更快,但与Atomic*类相比慢了两个数量级。考虑以获得两者:适中的速度和简单性。

于 2012-06-23T09:51:21.007 回答