进程与线程

一、进程与线程

1、进程

操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位。进程是一种抽象的概念,一般由程序、数据集合和进程控制块三部分组成,如下:
1)程序用于描述进程要完成的功能,是控制进程执行的指令集
2)数据集合是程序在执行时所需要的数据和工作区
3)程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志

2、线程

线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。

3、两者间的区别

举个例子:进程=火车,线程=车厢

3.1、本质区别

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

3.2、内存分配

系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

3.3、切换开销

每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

3.4、包含关系

线程在进程下行进(单纯的车厢无法运行)一个进程可以包含多个线程(一辆火车可以有多个车厢),线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程

二,进程间通信方式

进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型,如下:
1)低级通信,控制信息的通信(主要用于进程之间的同步,互斥等控制信息的传递)
2)高级通信,大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等)

2.1、管道通信

管道通常指无名管道,是一种半双工的通信方式,数据只能单向流动。当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。

2.2、消息队列

消息队列是消息的链接表,包括Posix消息队列system V消息队列,存放在内核中并由消息队列标识符(即队列ID)标识。

2.3、共享内存

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

2.4、信号量

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。

三,线程间通信方式

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制

3.1、锁机制

1)互斥锁:确保同一时间只能有一个线程访问共享资源。
2)递归锁:也称为可重入互斥锁(reentrant mutex),是互斥锁的一种,同一线程对其多次加锁不会产生死锁。递归锁会使用引用计数机制,以便可以从同一线程多次加锁、解锁,当加锁、解锁次数相等时,锁才可以被其他线程获取。

3.2、信号量机制

线程的信号和进程的信号量类似,使用线程的信号量可以高效地完成基于线程的资源计数

四、线程同步

即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。实现线程同步的方式有很多种,最常见的就是使用锁机制实现线程同步,线程同步的最终目标是实现对共享资源的安全访问。

你可能感兴趣的:(高并发编程,java,网络,jvm)