Sharpmark's Personal Home Page

并发编程 – 并行与分布式

如果两个事件在同一时间间隔内发生就称这两个事件是并发的,两个或多个任务在同一时间间隔内执行叫做并发执行。对我们而言,并发并不一定就表示在同一精确时刻执行,例如,两个任务可能在同一秒发生,但是每个任务在该秒的不同时间片内执行。

并发技术是的计算机程序能够在同一时间间隔或同一时限内做更多的工作,……。某些情况下,在同一时间间隔做更多的工作并不是目的所在,简化程序解决方案才是真正目的。有时把问题的解决方案看作一组并发执行的任务更合理。

并行(Parallel)分布式(Distributed)编程是达到软件并发的两种基本途径,它们是两种不同的、有时又相互交叉的编程范例。并行编程技术将程序必须处理的作业分配给一个物理或虚拟计算机内的两个或多个处理器,分布式编程技术将程序必须处理的作业分配各两个或多个处理器,这些处理器可以也可以不在同一个计算机中,也就是说分布式程序的各部分通常在不同的由网络连接的计算机上运行,或者至少在不同的处理器上运行。包含并行性的程序在同一个物理或虚拟计算机上执行,程序内的并行性可分成进程或线程。分布式程序仅能分成线程,多线程仅限于并行性。

在技术上,并行程序有时候是分布式的,例如PVM(Parallel Virtual Machine) 编程;分布式编程有时用于实现并行性,例如MPI(Message Passing Interface)编程。但是并非所有的分布式程序都包括并行性,分布式程序的各部分可以在不同时间间隔内的不同时刻执行。

软件级的并发可以分为:指令级、例程(函数/程序)级、对象级、应用程序级。

——摘自《C++并行与分布式编程》 Parallel and Distributed Programming Using C++

并行计算和分布式计算是两个容易混淆的概念,希望上面的解释可以帮助同样迷惑的你理解他们的关系。

Java Enterprise Edition(J2EE)概述

十月份开始看J2EE的东西。很崩溃,突然涌出来那么多名词。一个个理解它们的意思,作用和使用方法……。很吐,为了能让后来人不被这些名词所迷惑,这里写个扫盲贴,新入门的人可以根据下面的介绍,合理的选择自己需要学习的东西。随着我对他们认识的逐步加深,这篇还可能不断更新。欢迎随时关注。下面的内容都是自己写的,但自己也是初学,所以有什么不对的地方,欢迎指正。

Java

先说Java. 目前广泛使用的是Java 1.5。Java分为Java Platform, Enterprise Edition(Java EE), Java Standard Edtion(Java SE), Java Micro Edition(Java ME)。分别运用于企业开发,标准开发以及移动设备(嵌入式)开发。在Java是1.2版本的时候,SUN认为Java改动很大,所以称之为Java2。后来大家习惯了这种称呼方法,就有了所谓的J2EE, J2SE, J2ME,他们跟Java EE/SE/ME是完全等价的。不过在2006年,SUN放弃了J2xE的称呼,统一为Java XX Edition。这里侧重说一些关于Java EE的名词。

JDK/JRE

JDK:Java Development Kit。语源是SDK。是Java得开发包,面向使用Java开发的人员。JRE是Java Runtime Enviroment,面向的是使用Java相关软件或者服务的用户。

JSP/Servlet

Servlet是Java EE的核心。它是一个响应网络请求,并做出答复的组件。可以处理各种网络请求,并返回结果。绝大多数时候,servlet响应的是http请求,返回的是一个html页面。Servlet处理请求得功能很完善,不过对于返回的Html各式并没有天生的良好支持。所以就有了JSP(Java Server Page),它是将类似Java语法的代码嵌入html页面中,生成动态的html。JSP实质上,在最后都会编译成servlet。所以,JSP只是一种简化html开发的技术。

Struts/Webwork

基于Java EE的框架。所谓框架, 可以理解成是对底层进行了封装,并提供专有功能的程序库。Struts是Java EE的老牌开源框架。struts, webwork都是侧重于表示层方面的框架,都是基于MVC模型。Struts 1.2比较成熟,多数使用struts的都是基于此版本。所谓的struts 2.0是struts的开发者发现struts本身的固有模型有问题,所以完全放弃,跟另一个表示层框架webwork合并,使用Webwork2作为底层的新框架,跟struts 1.2完全不同。

阅读全文 »