什么是线程,什么是进程,进程与线程的区别

电脑知识 投稿 60500 0 评论

一、什么是进程?什么是线程

什么是线程?什么是进程?进程与线程的区别?

进程:进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位)。进程可以理解为一个应用程序的执行过程,应用程序一旦执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。

线程:程序执行的最小单位。

为什么要有线程?

每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的并发请求,为每一个请求都创建一个进程显然行不通(系统开销大响应用户请求效率低),因此操作系统中线程概念被引进。

线程的六个状态:

  1. 初始状态(NEW):一个尚未启动的线程所处的状态;

  2. 可运行状态(RUNNABLE):可运行线程的线程状态,可能正在运行,也可能在等待处理器资源;

  3. 阻塞状态之锁阻塞(BLOCKED):被阻塞等待监视器锁定的线程所处的状态(即当一个线程试图获取锁,但锁此时被其他线程持有,该线程进入BLOCKED状态,当线程拿到锁则进入RUNNABLE状态);

  4. 阻塞状态之无限等待(WAITING):未指定等待时间的线程所处的状态(调用Object.join()或Object.wait()方法时进入此状态,一个线程处于该状态时,只能被另一个线程唤醒,而不能自己主动唤醒,另一个线程调用notify()或notifyAll()或中止状态时来唤醒该线程);

  5. 阻塞状态之定时等待(TIMED_WAITING):指定等待时间的线程所处的状态(调用Thread.sleep(long)或Object.join(long)或Object.wait(long)方法时进入此状态,直到时间超时或收到唤醒通知,注意wait(0)时是可以自己苏醒的,比如当Thread结束时就会自动苏醒);

  6. 终止状态:已经执行完成的线程状态。

二、进程与线程的区别

  1. 地址空间: 同一进程的所有线程共享本进程的地址空间,而不同的进程之间的地址空间是独立的。

  2. 资源拥有: 同一进程的所有线程共享本进程的资源,如内存,CPU,IO等。进程之间的资源是独立的,无法共享。

  3. 执行过程:每一个进程可以说就是一个可执行的应用程序,每一个独立的进程都有一个程序执行的入口,顺序执行序列。但是线程不能够独立执行,必须依存在应用程序中,由程序的多线程控制机制进行控制。

  4. 健壮性: 因为同一进程的所以线程共享此线程的资源,因此当一个线程发生崩溃时,此进程也会发生崩溃。 但是各个进程之间的资源是独立的,因此当一个进程崩溃时,不会影响其他进程。因此进程比线程健壮。

线程执行开销小,但不利于资源的管理与保护。

进程的执行开销大,但可以进行资源的管理与保护。进程可以跨机器前移。

进程和线程的选择取决以下几点:

  1. 需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程的代价是很大的。

  2. 线程的切换速度快,所以在需要大量计算,切换频繁时使用线程,还有耗时的操作时用使用线程可提高应用程序的响应。

  3. 因为对CPU系统的效率使用上线程更占优势,所以可能要发展到多机分布的用进程,多核分布用线程。

  4. 并行操作时用线程,如C/S架构的服务器端并发线程响应用户的请求。

  5. 需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

编程笔记 » 什么是线程,什么是进程,进程与线程的区别

赞同 (74) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽