一、概述
在windows中,每一个打开运行的应用程序或后台程序,比如运行中的QQ、谷歌浏览器、网易云音乐、资源管理器等都是一个进程。我们感觉这些程序是“同时”运行的,但实际上,一个处理器同一时刻只能运行一个进程,只是CPU在高速轮换执行让我们有这样的错觉,我们感受不到中断的原因是CPU执行速度相对于我们的感觉实在是太快了。
我们学c,写java,大部分时候做的都是单线程的编程。只有一条顺序执行的主线——程序从main方法开始,依次执行代码,直到执行完全部代码,除非某一行代码出错导致主线阻塞。
多线程就是有多条顺序执行流“同时”执行,且它们之间互不干扰。多线程的应用场景,举一个很简单的例子,我们写一个Web网站后台,如果只支持单线程,那么同时只能有一个用户访问站点,这现实吗?我们是不是应该为每一个用户创建一个线程,使每个用户能“同时”访问站点。
这里,我所有的“同时”都画上了引号,因为在计算机领域,宏观的“同时”与微观的“同时”是不同的,它们被叫做并发与并行。
并发是指,同一时刻只能有一条指令(或一个进程、一个线程)运行,但由于CPU的轮换执行速度超乎想象,在宏观上看,就有多条指令同时执行的效果。
而并行,就像我们平时的理解,是同一时刻有多条指令在多个处理机上同时执行。
二、进程详述
1、概念
我们都知道程序,一个程序是静态的,通常是存放在外存中的。而当程序被调入内存中运行后,就成了进程。
顾名思义,进程就是进行中的程序,它是个动态的概念。是系统进行资源分配与调度的基本单位。
2、进程一般有如下三个特点:
a、独立性:每个进程拥有自己独立的资源,拥有私有的地址空间,其大小与处理机位数有关,如Win32系统,32位地址映射4GB地址空间,其中低地址的2GB作为用户模式的虚拟地址空间(应用程序可共享,线程间独立),高地址的2GB作为内核模式的虚拟地址空间(系统使用)。
b、动态性:这点从进程的概念可以看出,运行中的程序就是进程。进程中有时间、状态(博文详解)、生命周期等动态的概念。
c、并发性:多个进程在单个处理器上并发执行。
3、进程主要包含了三个部分:
a、程序代码:用于描述进程要完成的功能。
b、数据集合:程序执行所需要的数据与工作区域。
c、PCB程序控制块:包含进程的描述信息与控制信息,是进程的唯一标志,也正是因为有了PCB,进程就成了一个动态的概念。
三、线程与多线程详述
1、概念,由线程与进程关系论述
一个进程内部可能包含了很多顺序执行流,每个顺序执行流就是一个线程。
现在操作系统大多使用抢占式多任务操作策略,以支持多进程的并发性,而多线程是多进程的扩展,使一个进程也能像一个处理器一样并发处理多项任务,线程就是进程中并发执行的基本单位,线程也因此被称为“轻量级进程”。一个进程可以包含多个线程,每条线程都有其父进程。
2、线程的资源
我们可能了解过Java的内存机制,听说过“线程私有”、“线程共享”这样的名词,方法栈(通过栈帧中的局部变量表存放局部变量)、程序计数器是线程私有的,它们的内存空间是专属于某条线程的;而父进程的资源(如代码段、进程公有数据)是子线程间共享的,对于共享资源区域的编程要十分小心,确保不会影响到其他线程。
3、多线程的优势,由线程与进程的区别论述
a、独立的线程与分隔的进程相比,隔离程度更小,因为线程共享了进程的资源,更容易实现线程间通信。
b、系统创建一个进程要为进程分配资源,而创建一个线程,只需要分配线程私有的资源即可,代价小很多,多以用多线程代替多进程实现高并发有更高的效率。
c、多线程编程更加方便,程序代码级别即可实现。
原文地址:https://www.cnblogs.com/xiaowie/p/9133223.html