分布式计算第一次作业(部分)
一、分布式计算发展历程
分布式计算主要经历了三个阶段。
第一阶段(1980~1990)主要是通过 进程通讯技术,实现信息共享。
第二阶段(1990~2000)面向对象技术的迅猛发展,大量应用之间的互操作成为了急需解决的问题。 分布式对象 和 中间件 技术成为解决分布式系统问题的利器,把程序员从通讯程序细节中解放出来。
第三阶段(2000~)互联网技术的兴起,基于业务层面的跨系统协作需求催生了 Web服务 和SOA技术(服务计算)解决方案。
下图给出了分布式计算的历程和关键技术。
核心概念PRC(Remote Procedure Call)
RPC即远程调用是进程间通讯的一种基础范型。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
二、TCP通讯
TCP/IP协议,即传输控制协议/英特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号
、顺序号、确认号、校验字等)
三、线程和进程
概念(摘自维基)
进程
(
英语:process
),是计算机中已运行
程序
的实体。进程为曾经是
分时系统
的基本运作单位。在面向进程设计的系统(如早期的
UNIX
,
Linux
2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、
Linux
2.6及更新的版本)中,进程本身不是基本运行单位,而是
线程
的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步(
平行
)的方式独立运行。现代
计算机系统
可在同一段时间内以进程的形式将多个程序加载到内存中,并借由时间共享(或称
时分复用
),以在一个
处理器
上表现出同时(
平行性
)运行的感觉。同样的,使用多线程技术(多线程即每一个线程都代表一个进程内的一个独立执行上下文)的操作系统或计算机架构,同样程序的
平行
线程,可在多CPU主机或网络上真正
同时
运行(在不同的CPU上)。
线程
(
英语:thread
)是
操作系统
能够进行运算
调度
的最小单位。它被包含在
进程
之中,是
进程
中的实际运作单位。一条线程指的是
进程
中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在
Unix System V
及
SunOS
中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
区别与联系
联系:
一个进程至少拥有一个线程——主线程,也可以拥有多个线程;一个线程必须有一个父进程。多个进程可以并发执行;一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
一个进程至少拥有一个线程——主线程,也可以拥有多个线程;一个线程必须有一个父进程。多个进程可以并发执行;一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
区别:
系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销
资源管理:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
通信方式:进程间通信主要包括管道、系统IPC(包括消息队列,信号量,共享存储)、SOCKET。进程间通信其实是指分属于不同进程的线程之间的通讯,所以进程间的通信方法同样适用于线程间的通信。但对应归于同一进程的不同线程来说,使用全局变量进行通信效率会更高。