13.1 线程概述

一、线程和进程

1.1 概述

几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程。当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程

1.2 进程

进程:所有运行在的任务通常对应一个进程(Process)。当一个程序进入内存中运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定独立功能,进程是系统进行资源分配和调度的一个独立单位。
进程的三个特点:
1:独立性:进程是系统中独立存在的实体,它可以独立拥有资源,每一个进程都有自己独立的地址空间,没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间。
2:动态性:进程和程序的区别在于进程是动态的,进程中有时间的概念,进程具有自己的生命周期和各种不同的状态。
3:并发性:多个进程可以在单个处理器上并发执行,互不影响。
并发性和并行性是不同的概念:并行是指同一时刻,多个命令在多个处理器上同时执行;并发是指在同一时刻,只有一条命令是在处理器上执行的,但多个进程命令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果如图所示

现代大多操作系统都支持多进程的并发,但在具体的实现细节上可能因为硬件和操作系统不同而采取不同的策略。比较常用方式有:共用式的多任务操作策略,抢占式多任务操作策略(效率更高)。

1.3 线程

多线程扩展了进程的概念,使得一个进程可以同时并发处理多个任务。线程(Thread)也被称为轻量级进程(Lightweight Process),线程是进程的执行单位。就像进程在操作系统中的地位一样,线程在程序中是独立的、并发的执行流。当进程被初始化后,主线程就被创建,对于绝大多数的应用程序来说,通常要求有一个主线程,但也可以在该进程内创建多条顺序执行流,这些顺序执行流就是线程,每个线程也是相互独立的。
线程:
线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程。线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源。它与父进程的其他线程共享该进程的所有资源。
线程的特点:
(1)线程可以完成一定任务,可以和其它线程共享父进程的共享变量和部分环境,相互协作来完成任务。
(2)线程是独立运行的,其不知道进程中是否还有其他线程存在。
(3)线程的执行是抢占式的,也就是说,当前执行的线程随时可能被挂起,以便运行另一个线程。
(4)一个线程可以创建或撤销另一个线程,一个进程中的多个线程可以并发执行。

1.4 线程、进程归纳

操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。

二、多线程的优势

进程间不能共享内存,但线程之间共享内存非常容易。
系统创建进程需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程来实现多任务并发比多进程的效率高。
Java语言内置的多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了Java的多线程编程
在实际应用中,多线程是非常有用的。一个浏览器可以同时下载多张图片;一个Web服务器必须能同时响应多个用户的请求;Java虚拟机本身就在后台提供了一个超级线程来进行来及回收.....

posted @ 2020-05-09 18:32  小新和风间  阅读(186)  评论(0编辑  收藏  举报