java EE初阶 —进程与线程的区别
文章目录
- 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初阶 —进程与线程的区别相关推荐
- 详细讲解 —— 多线程的四个案例、单例模式、阻塞队列、定时器、线程池(Java EE初阶)(万字长文)
多线程 1 wait和notify 1.1 wait()方法 1.2 notify()方法 \ notifyAll()方法 1.3 wait 和 sleep 的对比(面试题) 2. 多线程案例 2.1 ...
- 【Java EE 初阶】如何保证线程安全二
目录 线程安全[一] 1.线程不安全是什么? 2.线程不安全的成因 3.解决线程不安全之一Synchronized关键字(监视器锁) 1.Synchronized使用方法 2.锁对象是什么? 3.锁对 ...
- 详细讲解 —— 网络编程套接字(Java EE初阶)
网络编程套接字 1 认识网络编程套接字 2 UDP 数据报套接字编程 2.1 UPD服务端 2.1 UDP客户端 2.3 结果测试 3 TCP流套接字编程 3.1 TCP服务端 3.2 TCP客户端 ...
- Java EE初阶---网络原理之TCP_IP
1.网络基础 1.1 认识IP地址 概念 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址. 作用 IP地址是IP协 ...
- Java EE初阶---HTML
1.HTML 结构 1.1 认识 HTML 标签 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body> 标签名 (body) ...
- Java并发编程:进程和线程之由来
2019独角兽企业重金招聘Python工程师标准>>> Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编 ...
- [Java]进程与线程的区别(转)
[Java]进程与线程的区别(转) 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自 ...
- 高薪程序员面试题精讲系列60之进程与线程的区别有哪些?
一. 面试题及剖析 1. 今日面试题 什么是进程? 什么是线程? 说说进程与线程的区别有哪些? 2. 题目剖析 我们在面试时,有时会遇到一些知识点,是不分编程语言的.也就是说,无论你是应聘Java.H ...
- 程序,进程,线程的区别和联系
进程和程序区别和联系表现在以下方面: 1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体.而进程则不同,它是程序在某个数据集上的执行.进程是一个动态的实体,它有自己的生命周 ...
最新文章
- (1)学习数组,集合,IEnumerable接口,引申学习迭代器
- C++ 退出双层for循环,解决 break、return、continue无法实现问题
- bcftools合并vcf文件
- JS调用PageOffice接口,删除Word表格中光标所在行
- Mybatis 关于同一条SQL语句实现批量插入和更新(SaveOrUpdate)完整版
- SSh结合Easyui实现Datagrid的分页显示
- spring batch @EnableBatchProcessing作用
- REVIT模型之机器人瓦力
- verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板
- 前端学习(3300):三种usecontent的
- 论文浅尝 | Know-Evolve: Deep Temporal Reasoning for Dynamic KG
- 卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的
- 以张鸿蒙系统的手机,搭载鸿蒙系统的手机真的要来了?因为别无选择,所以唯有向前!...
- 机器学习算法(8)——朴素贝叶斯、最小风险贝叶斯决策
- Codeforces976E Well played! 【贪心】
- 940mx黑苹果驱动_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!
- php mvc vue 调用js函数_js 匿名函数自调用
- 真正的研发之路(1)
- [postgresql]postgresql的VACUUM 介绍
- 手机测试移动网速的软件,移动测试网速(中国移动在线测速)