文章目录

  • 1.为什么会引入进程和线程的概念
  • 2.进程和线程的关系
    • 2.1 坤坤吃鸡演示进程和线程区别
      • 2.1.1 线程的安全问题
      • 2.1.2 线程的异常问题

1.为什么会引入进程和线程的概念

引入进程这个概念,最主要的目的是为了解决并发编程这样的问题。
CPU 已经进入了多核心的时代,要想进一步提高程序的执行速度,就需要充分利用 CPU D多核资源。

其实,多进程编程已经可以解决并发编程问题了,这说明已经可以利用起CPU资源了。
但是不好的地方是,进程太重了(消耗的资源多、速度慢

当创建一个进程、销毁一个进程、调度一个进程时,它的开销会比较大。
这里说的太重了是指在资源分配和回收上执行的效率太慢了,消耗的资源多。

鉴于上面的情况,线程应运而生。
线程把申请资源释放资源的操作给省下来了。
在解决并发编程的前提下,让创建、销毁、调度的速度更快一些。
因此线程也叫 “轻量级进程”

举个例子来演示进程和线程概念:

现在有一个工厂要加工一些产品。

此时由于销量比较大,需要将厂子扩建一下。

有两种方案可选。

方案1:再租一块场地,在搞一套设备。


方案1就是多进程的方案

方案2:在原来的场地里,再搞一套生产设备线


方案2就是多线程的方案

很明显方案2要比方案1成本小很多,因为场地和物流体系都可以复用之前的。

此时,在搞第一套生产线的时候,需要吧资源申请到位。
后续追加新的生产线的时候,复用之前的资源即可。

由此可以看出,线程之间资源是共享的

2.进程和线程的关系

进程包含着线程

一个进程可以包含一个线程,也可以包含多个线程,但是不能没有。
只有第一个线程启动的时候开销是比较大的,后续的线程就省事了。
同一个进程里的多个线程之间,共用了进程的同一份资源。
这里的资源指的是,内存文件描述符表

  • 第一个线程创建的对象,进程里的其他线程可以直接使用。
  • 第一个线程打开的文件,其他的线程都可以直接使用。

如果一个进程有多个线程,每个线程是独立在CPU上调度的,即线程是操作系统调度的基本单位。
每个线程也都有自己的支持逻辑(执行流

2.1 坤坤吃鸡演示进程和线程区别

有一个坤坤要吃100只鸡

如果是采用多进程的方式吃鸡:

现在有两个坤坤,两个房间、两个桌子,此时的成本会比较高。

如果是采用多线程的方式吃鸡:

现在增加一只坤坤即可。


两只坤坤同时吃鸡,不需要增加桌子和房间,效率提升的同时成本也减少了。

按照上面的逻辑,如果让更多的坤坤吃鸡,速度岂不是更快吗?


增加线程数量的时候,也不是可以一直可以提升速度的!!!
桌子的空间是有限的(CPU的核心数量也是有限的
如果坤坤太多,大家挤来挤去,这就会导致正在吃的坤坤无法专心吃。

因此,线程太多,核心数目有限,不少的开销会浪费在线程调度上了。

2.1.1 线程的安全问题

多线程的情况下,多个坤坤共享一份鸡肉,此时就可能会打架。

大坤和小坤同时看上了一个一只鸡,都去吃,就可能会打起来。


在多进程中,不会出现这种情况,因为多进程里已经把鸡给分好了,自己吃自己的。

这就是线程的安全问题。(线程不安全)

2.1.2 线程的异常问题

大坤先把鸡给吃了,导致小坤吃不到了。小坤就会生气,你小坤哥就会把桌子掀了。

此时如果一个线程抛异常,如果处理不好,很可能把整个进程都给带走了。
其他的线程也就挂了。

多个执行流访问同一个共享资源的时候,就会有安全问题。

线程模型,天然就是资源共享的。
多线程争抢同一个资源(同一个变量),这时是非常容易触发安全问题的。

进程模型,天然是资源隔离的,不容易触发安全问题。
进行进程间通信的时候,多个进程访问同一个资源,可能就会出问题。

java EE初阶 —进程与线程的区别相关推荐

  1. 详细讲解 —— 多线程的四个案例、单例模式、阻塞队列、定时器、线程池(Java EE初阶)(万字长文)

    多线程 1 wait和notify 1.1 wait()方法 1.2 notify()方法 \ notifyAll()方法 1.3 wait 和 sleep 的对比(面试题) 2. 多线程案例 2.1 ...

  2. 【Java EE 初阶】如何保证线程安全二

    目录 线程安全[一] 1.线程不安全是什么? 2.线程不安全的成因 3.解决线程不安全之一Synchronized关键字(监视器锁) 1.Synchronized使用方法 2.锁对象是什么? 3.锁对 ...

  3. 详细讲解 —— 网络编程套接字(Java EE初阶)

    网络编程套接字 1 认识网络编程套接字 2 UDP 数据报套接字编程 2.1 UPD服务端 2.1 UDP客户端 2.3 结果测试 3 TCP流套接字编程 3.1 TCP服务端 3.2 TCP客户端 ...

  4. Java EE初阶---网络原理之TCP_IP

    1.网络基础 1.1 认识IP地址 概念         IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址. 作用         IP地址是IP协 ...

  5. Java EE初阶---HTML

    1.HTML 结构 1.1 认识 HTML 标签 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body> 标签名 (body) ...

  6. Java并发编程:进程和线程之由来

    2019独角兽企业重金招聘Python工程师标准>>> Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编 ...

  7. [Java]进程与线程的区别(转)

    [Java]进程与线程的区别(转) 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自 ...

  8. 高薪程序员面试题精讲系列60之进程与线程的区别有哪些?

    一. 面试题及剖析 1. 今日面试题 什么是进程? 什么是线程? 说说进程与线程的区别有哪些? 2. 题目剖析 我们在面试时,有时会遇到一些知识点,是不分编程语言的.也就是说,无论你是应聘Java.H ...

  9. 程序,进程,线程的区别和联系

    进程和程序区别和联系表现在以下方面: 1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体.而进程则不同,它是程序在某个数据集上的执行.进程是一个动态的实体,它有自己的生命周 ...

最新文章

  1. (1)学习数组,集合,IEnumerable接口,引申学习迭代器
  2. C++ 退出双层for循环,解决 break、return、continue无法实现问题
  3. bcftools合并vcf文件
  4. JS调用PageOffice接口,删除Word表格中光标所在行
  5. Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版
  6. SSh结合Easyui实现Datagrid的分页显示
  7. spring batch @EnableBatchProcessing作用
  8. REVIT模型之机器人瓦力
  9. verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板
  10. 前端学习(3300):三种usecontent的
  11. 论文浅尝 | Know-Evolve: Deep Temporal Reasoning for Dynamic KG
  12. 卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的
  13. 以张鸿蒙系统的手机,搭载鸿蒙系统的手机真的要来了?因为别无选择,所以唯有向前!...
  14. 机器学习算法(8)——朴素贝叶斯、最小风险贝叶斯决策
  15. Codeforces976E Well played! 【贪心】
  16. 940mx黑苹果驱动_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!
  17. php mvc vue 调用js函数_js 匿名函数自调用
  18. 真正的研发之路(1)
  19. [postgresql]postgresql的VACUUM 介绍
  20. 手机测试移动网速的软件,移动测试网速(中国移动在线测速)

热门文章

  1. 微信小程序 |基于百度AI从零实现人脸识别小程序
  2. 简易电子章制作小模块(VBA)
  3. 猿创征文|unity中的MVC编程思想基础
  4. JavaScript 04 — Array Cardio Day 1
  5. 【英文SEO】Google网站管理员工具是什么?
  6. Android系统相机拍照与选择照片
  7. 初识Navigation(导航)
  8. 基于Mini无人机与改进损失函数的YOLO V3的大豆幼苗自动计数系统V1.0-使用手册
  9. 关于网上下载东西捆绑软件的问题
  10. java枚举类是怎么初始化的,为什么说枚举类是线程安全的