1. 进程
进程(Process)是计算机程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
程序是指令、数据及其组织形式的描述,进程是正在运行的程序的实例。
进程是由程序段、数据段和进程控制块三部分组成。
进程间通信方式:管道、消息队列、共享内存、信号量、套接字。
2. 线程
线程(Threads)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
进程启动时,操作系统会给它分配独立的地址空间,进程间相互独立,互不影响。
线程基本上不拥有系统资源。在运行时,暂用一些程序计数器、寄存器和栈 。多个线程共享进程中的地址空间。
一个程序至少有一个进程,一个进程至少有一个线程。进程中的多个线程并行执行不同的任务。
线程间的通信主要是用于线程同步,方式有临界区、互斥量、信号量、事件。
3. 进程和线程的区别
(1)进程是资源分配的最小单位,线程是程序执行的最小单位。
(2)进程的创建和销毁,系统开销远大于线程。
(3)线程上下文切换速度远高于进程。
4. 线程状态
(1)新建(New),创建一个线程对象。
(2)就绪(Runnable),线程对象创建后,其它线程调用了该对象的start()方法。就绪状态的线程位于可执行线程池中,等待获取CPU时间片。
(3)运行(Running),就绪状态的线程获取到了CPU时间片,执行程序代码。
(4)阻塞(Blocked),运行状态的线程由于某种原因放弃了CPU资源,临时中止执行。线程阻塞结束,进入就绪状态。
(5)死亡(Dead),线程运行结束或者因异常终止。
阻塞的三种情况:
(1)等待阻塞:运行状态的线程调用wait()方法,JVM会把该线程放入等待池中。
(2)同步阻塞:运行状态的线程在获取对象的同步锁时,该同步锁被别的线程占用,JVM会把该线程放入锁池中。
(3)其它阻塞:运行状态的线程调用sleep()或join()方法,或者发出了I/O请求,JVM会把该线程置为堵塞状态。
5. 线程池
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池和连接池都是对象复用思想的运用,目的是降低系统开销,提高应用的性能。