并发编程的Java抽象

发表于:2011-10-10 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Adley(cnblogs)    来源:51Testing软件测试网采编

#
java
分享:

  各种程序员都工作在各自的程序抽象维度,如果我们发现解决一件事情比较难,也许是我们面对的抽象级别还不够高,或者引入的间接程度不够,本文以抽象角度来剖析并发编程。

  一、机器和OS级别抽象

  (1)冯诺伊曼模型

  经典的顺序化计算模型,貌似可以保证顺序化一致性,但是没有哪个现代的多处理架构会提供顺序一致性,冯氏模型只是现代多处理器行为的模糊近似。

  这个计算模型,指令或者命令列表改变内存变量直接契合命令编程泛型,它以显式的算法为中心,这和声明式编程泛型有区别。就并发编程来说,会显著的引入时间概念和状态依赖

  所以所谓的函数式编程可以解决其中的部分问题。

  (2)进程和线程

  进程抽象运行的程序,是操作系统资源分配的基本单位,是资源cpu,内存,IO的综合抽象。

  线程是进程控制流的多重分支,它存在于进程里,是操作系统调度的基本单位,线程之间同步或者异步执行,共享进程的内存地址空间。

  (3)并发与并行

  并发,英文单词是concurrent,是指逻辑上同时发生,有人做过比喻,要完成吃完三个馒头的任务,一个人可以这个馒头咬一口,那个馒头咬一口,这样交替进行,最后吃完三个馒头,这就是并发,因为在三个馒头上同时发生了吃的行为,如果只是吃完一个接着吃另一个,这就不是并发了,是排队,三个馒头如果分给三个人吃,这样的任务完成形式叫并行,英文单词是parallel。

  回到计算机概念,并发应该是单CPU时代或者单核时代的说法,这个时候CPU要同时完成多任务,只能用时间片轮转,在逻辑上同时发生,但在物理上是串行的。现在大多数计算机都是多核或者多CPU,那么现在的多任务执行方式就是物理上并行的。

  为了从物理上支持并发编程,CPU提供了相应的特殊指令,比如原子化的读改写,比较并交换。

  (4)平台内存模型

  在可共享内存的多处理器体系结构中,每个处理器都有它自己的缓存,并且周期性的与主存同步,为什么呢?因为处理器通过降低一致性来换取性能,这和CAP原理通过降低一致性来获取伸缩性有点类似,所以大量的数据在CPU的寄存器中被计算,另外CPU和编译器为了性能还会乱序执行,但是CPU会提供存储关卡指令来保证存储的同步,各种平台的内存模型或者同步指令可能不同,所以这里必须介入对内存模型的抽象,JMM就是其中之一。

  二、编程模型抽象

  (1)基于线程模型

  (2)基于Actor模型

  (3)基于STM软件事务内存

  ........

  Java体系是一个基于线程模型的本质编程平台,所以我们主要讨论线程模型。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号