VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 进程与线程

进程与线程

最直观的表现,就是当我们打开 Mac 的「活动监视器」时,会发现有两个栏,分别是「进程名称」与「线程(数量)」。

其中,进程可以简单地理解为程序的一次运行,比如我们打开了「网易云音乐」,就会有一个「网易云音乐」的进程。我们好像并没有见过叫做「kernel_task」的软件,这类程序其实是系统的后台进程,它随操作系统的启动而启动,完成操作系统的基本服务功能。另外一类程序也被称为用户进程,它是由用户来启动,完成用户所需要的具体的应用功能,比如浏览网站,听音乐,上面说的「网易云音乐」就是一个用户进程。

一个进程可以有一个或多个线程,上图线程一栏的数字就代表对应进程中的线程数量。各个线程共享进程的内存空间、系统资源。早期的操作系统其实只有进程,没有线程。随着 CPU 计算能力的显著提升,为了提高 CPU 的利用率,弥补进程独傲度过于笨重的问题,进程内部演进出了并发调度的需求,于是发明了线程。

进程是操作系统资源分配的最小单位,线程是 CPU 调度的最小单位。

进程的结构

一个进程,大致可以被分为三个部分:代码段、数据段、进程控制块。

代码段:进程的程序指令在内存中的位置,包含需要执行的指令集合。

数据段:进程的操作数据在内存中的位置。

进程控制块(PCB):包括描述信息和控制信息。


下面我们来说说,PCB 里面一些重要的概念。

进程 ID:进程的唯一标识,在操作系统中我们很常见到他们,即 PID。

进程名称:跟人名一样,进程也有各自的名称。

进程状态:分为新建态、终止态,运行态,就绪态,阻塞态。

进程优先级:进程调度的重要依据。进程优先级越好,则越有可能被优先调度。

程序起始地址:程序第一行指令的内存地址,程序就是从这个地址开始执行的。

通信信息:进程间通信时的消息队列。

内存信息:进程的内存占用情况以及内存管理所用的数据结构。

I/O 设备信息:所用的I/O设备编号及相应的数据结构。

文件句柄:所打开文件的信息。

进程上下文:进程的环境,包括 CPU 寄存器、程序计数器(PC)以及各种栈。在进程让出 CPU 时,进程的上下文环境就会保存在 PCB 中,供下次恢复运行时使用。

线程的结构

与进程相似,一个线程主要由三个部分组成:线程描述信息、程序计数器(PC)、栈内存。

线程描述信息:即线程的基本信息。

PC:记录了线程下一条指令的代码段内存地址。

栈内存:线程中的局部变量存储在栈内存中,这部分内存为线程独立拥有的,不会在线程之间共享。


那么,线程都有哪些基本信息?

线程 ID:线程的唯一标识。

线程名称:方便用户识别,用户可以指定线程名称(不指定则系统自动分配)。

线程优先级:线程调度的优先级,优先级越高,获得 CPU 的执行机会就越大。

线程状态:线程的执行状态,分为新建、就绪、运行、阻塞、结束。

其他:比如,是否是守护线程。

Java 中的进程与线程

众所周知,Java 程序是运行在 JVM 之上的,每当我们使用 Java 命令启动一个 Java 程序,就会启动一个 JVM 进程。JVM 会寻找程序的入口(main 方法),运行 main 方法便有了「主线程」。

除了主线程之外,Java 进程还包含一些「守护线程」。比如 GC 线程,它的作用是垃圾回收。


__EOF__

 
  • 本文作者: 康康。
  • 本文链接: https://www.cnblogs.com/wuyukangkang/p/processor-and-thread.html

    
    相关教程