并行和并发,分布式和集群

一、并发、并行

1网上的一种理解

并发在单核和多核都可存在,就是同一时间有多个可以执行的进程。

但是在单核中同一时刻只有一个进程获得CPU,虽然宏观上你认为多个进程都在进行。

并行是指同一时间多个进程在微观上都在真正的执行,这就只有在多核的情况下了。

并行和并发,分布式和集群_第1张图片


并发:就是1个cpu10个人轮流用。只是感觉不出来是轮流使用,如每人0.01ms。

并行:就是10个cpu10个人。一个人一个cpu,自己干自己的,完全独立运行,互不影响。

2网上的另一种理解

1)并发运行就是让计算机同时运行几个程序或同时运行同一程序多个进程或线程。
2)早期的计算机只具有一个中央处理器(CPU)并且是单核(只有一个运算器)的,这种情况下计算机操作系统采用并发技术实现并发运行,具体做法是采用“ 时间片轮询进程调度算法”,它的思想简单介绍如下: 在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU及CPU的运算器。
3)现阶段许多计算机具有多个中央处理器或一个处理器具有多个运算器(多核),情况就不同了,如果进程数小于CPU或运算器数,则不同的进程可以分配给不同的CPU或运算器来运行,这样,各个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU或运算器数,则仍然需要使用并发技术。
4)有些操作系统并不支持多个CPU或多核CPU,如 ms winodws 9x、3.x,这样的操作系统多个CPU、或多核CPU对它们来说是无用的。

3问答

1)那么j2ee的web工程,多个用户同时登陆并使用系统,在程序中获取当前登录用户时,服务器怎么知道是谁登录的(即程序怎么获取当前登录用户的)?

我的认为的过程如下:

①浏览器端发起一个http 请求 http://127.0.0.1:8080/testProject/test/test,这时候一共http请求链接一同发给服务器端的,还有浏览器的session信息

通过struts等框架映射后,对应的action代码如下:



②服务器端根据浏览器端传来的session信息,获取当前登录用户。


2)整个过程,完全感觉不到有其他人在使用系统,为什么?

这不就是并发的概念吗?好几个进程都要用cpu,而cpu只有一个,让他们轮着使用,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。


3)j2ee的web工程,老是在提“高并发”,“并发”是什么意思?

并行和并发,分布式和集群_第2张图片

可见,“并发”是服务器的事情,跟j2ee的web工程无关(即工程代码无关)。那么服务器如tomcat是怎么处理并发的呢?



二、分布式、集群


集群:一提升容量,二做替补。比如1)提升容量,数据库服务器的存储容量太小了,我通过集群,将容量变大了。2)做替补,如果一台服务器坏了,另一台还可以使用。

分布式:提升效率。比如一个人要抄100页书,要一天的时间,我再找20个人加入分工合作,可能一个小时就抄完了。


你可能感兴趣的:(并行和并发,分布式和集群)