@[TOC]
1并发
并发:指两个或多个时间在同一时刻间隔内发生,这些时间宏观上是同时发生的,但微观上是交替发生的。
并行:指两个或多个时间在同一时刻同时发生。
操作系统的并发性:指计算机系统中“同时”运行多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行着的。操作系统和程序并发是一起诞生的。
注意
单核CPU:同一时刻只能执行一个程序,各个程序之恶能并发的执行
多核CPU:同一时刻可以同时执行多个程序,多个程序可以并行的执行。如果运行的操作超过了CPU的数量,那么还是会有并发执行的。
2.共享
共享:资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
- 互斥共享方式:系统中的某些资源,虽然课题提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。 比如说手机上的摄像头,不可能qq和微信同时打开摄像头和别人聊天。
- 同时共享方式:系统中的某些资源,允许一个时间段内由多个经常“同时”对它们进行访问,“同时”也可能是交替访问,比如qq和微信同时发送文件,两个程序看起来是在同时运行,但其实是交替执行的。
3.并发和共享的关系
如果失去并发性,那么系统中只有一个程序正在运行,那么就不需要同时共享资源,所以也就没有了共享性。
如果失去共享性,那么只允许一个程序访问资源,那么也就不会有多个程序同时访问资源,那么也就没有了并发性。
我的理解是,没并发,就执行完一个程序在执行完下一个程序,共享也就不可能实现了,共享就是可以让几个程序交替的访问资源,如果没法交替也就不能并发。
4.虚拟
虚拟:把一个屋里上的实体变为若干个逻辑上的对应物,物理实体是实际存在的,而逻辑上对应物是后者感受到的。也就是说用户感觉到的和实际的并无一样。
一个程序需要放入内存并给它分配CPU才能运行,那你会发现你手机上运行了好几个软件,可能超过了运行内存,那么为啥还能同时运行呢,这里就用到了空分复用技术。只把需要用到的东西放入内存就行,其他不需要用到的就继续留在硬盘中。
一个单核CPU的计算机,却能同时运行好几个程序,用户感受到的是多个程序都在同时运行,但CPU在某个时刻中却只能运行一个程序,这又是为什么呢?这里就用到了时分复用技术,每个程序在CPU都只运行一段时间,每个程序交替运行,这样感觉好像多个程序都在同时运行。
虚拟和并发的联系:如果没有并发,那么就会一个时间段内都只运行一个程序,那么内存中也就只会有一个程序,也就没有了空分复用技术。内存中只有一个程序,那么也就不会有时分复用技术。
5.异步
异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,会等有资源了之后才会继续执行。进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
这里我们用java
里的多线程模拟一下。这里我们可以看到程序不是按照顺序执行的。可能会走走停停。
public class ThreadDemo {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread()+"A吃饭");
try {
//这里由于资源有限,所以必须要等一段时间资源来了在运行。假设等了1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread()+"A交心");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread() + "B吃饭");
System.out.println(Thread.currentThread() + "B交心");
}
}).start();
}
}
并发和异步的执行:如果没有了并发,那么系统只会有一个程序执行,资源也就不会被其他程序占用,那么也就没有了异步性。
总结
没有并发和共享,就谈不上虚拟和异步,因此并发和共享是操作系统的两个最基本的特征。