本文共 1965 字,大约阅读时间需要 6 分钟。
----- Actor模型
(1) 事务机制来由为什么大多数互联网软件都是数据喂机器,或函数式即可,比如twitter或facebook,因为他们没有事务要求,一般涉及到钱等重要交易都需要事务,也可以这么说,非结构化的数据一般都没有事务要求,结构化聚合的数据才有事务要求。(2) 事务例子用户甲的操作1.开始事务2.访问表A3.访问表B4.提交事务乙用户在操作1.开始事务2.访问表B3.访问表A4.提交事务 如果甲用户和乙用户的两个事务同时发生,甲事务锁住了表A未释放(因为整个事务未完成),正在准备访问B表,而乙事务锁住了表B未释放(因为整个事务未完成),正在准备访问A表,可是A表被甲事务锁住了,等甲事务释放,而甲事务真正等待乙事务释放B表,陷入了无限等待,也就是死锁Dead Lock。(3) 高并发事务解决之道悲观锁 - 数据库表锁或行锁乐观锁 - 版本控制同步锁 - 单线程Actor模型 - 行为消息队列(适用跨节点、分布式、高并发)* 同步锁是单一JVM内的,对于分布式系统多个 Tomcat容器多个JVM,Actor模型能更好地“锁”好资源。(4) Actor模型Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保证Actor内部数据只有被自己修改。一个Actor如何处理多个Actor的请求呢?它先建立一个消息队列,每次收到消息后,就放入队列,而它每次也从队列中取出消息体来处理。通常我们都使得这个过程是循环的。让Actor可以时刻处理发送来的消息。解决“一个人一个坑”的性能瓶颈参考:http://www.jdon.com/45728----- Akka与Reactor比较两者皆是异步事件驱动框架,都构建自Actor模型;Akka用 Scala 编写的库,目前更成熟,同时支持Scala和Java API;Reactor项目始于2012年,由Spring团队研发,但现在还常常大改。Akka:http://akka.ioJava代码Sample: http://verran.iteye.com/blog/1942393,http://www.blogbus.com/dreamhead-logs/235916459.html,http://www.th7.cn/Program/java/2012/03/29/67015.shtml,https://github.com/XiaoMi/rose/tree/master/rose-example/src/main/java/sampleSampleHelloWorld.java
[java]
[java]