一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

一、进程

1、什么是进程

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

2、进程的特点

  • 进程是程序的一次执行过程。
  • 进程是是正在运行程序的抽象。它代表运行的CPU,也称进程是对CPU的抽象。
  • 系统资源(如内存、文件)以进程为单位分配。
  • 操作系统为每个进程分配了独立的地址空间
  • 操作系统通过“调度”把控制权交给进程。

二、线程

1、什么是线程

线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

线程由线程ID,程序计数器(PC)[用于指向内存中的程序指令],寄存器集合[由于存放本地变量和临时变量]和堆栈[用于存放方法指令和方法参数等]组成。

2、为什么引入线程

主要归咎于两点. 一个是由实现决定的,一个是由需求决定的.

  1. 进程是资源调度的单位, 因此进程之间的切换的代价和开销比较大.
  2. 一个进程内可能需要多任务并发的执行,实现不同的功能.

3、进程与线程的区别

  1. 进程是拥有系统资源的,系统会给进程分配一个完整的虚拟地址空间.(不同进程无法共享相同的内存空间)
  2. 线程除了少量必要的资源外(存放本地变量),几乎不需要资源,因此它与资源分配无关。
  3. 进程之间相互独立,且不能共享资源
  4. 在同一进程的线程之间,可以共享进程的所有资源。
  5. 一个线程挂掉,整个进程都会跟着挂掉,而多进程应用,进程挂掉,不会影响到其他进程。多进程的程序要比多线程的程序健壮。
  6. 线程上下文切换的速度比进程上下文切换的快得多。
  7. 在多线程系统中,进程不是可执行的实体,线程才是实际的执行单位.

4、线程设计的3个难点

  1. 在 CPU 密集型任务、I/O 密集型任务以及充分利用多核 CPU 提升程序性能上找到一个平衡点。
  2. 尽可能支持规模更大的线程数量。
  3. 减少线程在用户态(User Mode)和内核态(Kernel Mode)中切换带来的开销。

5、并发与并行

并发:一个时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。

并行:一个时间段和时间点上都有多个线程或进程在执行。

Java并发篇_进程线程相关推荐

  1. Java并发篇_乐观锁与悲观锁

    乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展. 一.引入概念 1.悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次 ...

  2. Java并发篇_线程详解

    线程(thread) 是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 ...

  3. JAVA并发篇_公平锁与非公平锁

    简单的来说,如果一个线程组里,能保证每个线程都能拿到锁,那么这个锁就是公平锁.相反,如果保证不了每个线程都能拿到锁,也就是存在有线程饿死,那么这个锁就是非公平锁. 一.引入概念 1.公平锁: 多个线程 ...

  4. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  5. 学习笔记:Java 并发编程②_管程

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 配套资料: ...

  6. 学习笔记:Java 并发编程④_无锁

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 配套资料: ...

  7. 学习笔记:Java 并发编程⑥_并发工具_JUC

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 配套资料: ...

  8. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  9. Java 并发 多线程:创建线程的四种方式

    Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...

最新文章

  1. 三星手机怎么恢复删除的图片_手机相册照片突然删除了怎么恢复?这个方法好用...
  2. python怎么读取txt文件数据保存数组中-python将txt等文件中的数据读为numpy数组的方法...
  3. ListView中的图片异步加载、缓存
  4. Jmeter之配置元件操作
  5. HDU_oj_2047 阿牛的EOF牛肉面
  6. linux centos 编译luabind-0.9.1 动态库 静态库
  7. mysql navicat编码保持一致不乱码
  8. Windows 8 C++/CX字符串
  9. centos7 开机启动文件路径_centos7定时运行python脚本
  10. Oracle分析函数-nulls first/nulls last
  11. oracle rac 创建ocr,转:Oracle RAC 添加和删除OCR(10g)
  12. UVA12542 LA6149 Prime Substring【筛选法+贪心】
  13. python与excel-Python与Excel之间的交互
  14. [转载] python中set怎么循环_Python Set集合操作
  15. 机器学习人才的职业薪酬也发展
  16. java 整合永中云预览模块
  17. 在Windows 7上面安装Vs2005
  18. OpenContrail架构浅析
  19. IOS设备管理工具ITOOLS介绍
  20. 计算机桌面操作系统版本,如何看电脑操作系统版本

热门文章

  1. java实现apriori算法_各种排序算法的分析及java实现(一)
  2. php微信支付使用ajax,接入微信公众号支付,选择支付方式后,只弹出“error’”(php)...
  3. Python 线程优先队列 PriorityQueue - Python零基础入门教程
  4. d0...while循环结构讲解
  5. data后缀文件解码_Java语法进阶13-文件、IO流
  6. c语言创建一个顺序表主函数,用C语言来创建一个顺序表(数据结构部分)
  7. 基于蓝墨云平台的计算机教学,基于蓝墨云班课的中职计算机“分层教学”模式探究...
  8. vue 时区转换_vue---时间戳转换
  9. java mysql ssl警告_连接到MySQL数据库时有关SSL连接的警告
  10. 实现文件中名词的统计计数_通过勤哲EXCEL和Excel中的rank函数实现排名统计