举个例子 滑稽老师吃100只鸡
如何加快滑稽老师吃鸡的效率??
有一个方案,搞两个房间,两个滑稽老师 一个滑稽吃50只鸡,速度一定会大幅度增加
多进程的方案 创建新的进程 就需要申请更多的资源(房间和桌子)
另一个方案,使用多线程
房间和桌子还是那些,但是吃鸡的主角多了一个(这种方案,资源开销更小)
现在我们有两个滑稽,能够提高效率,如果引入更多的滑稽呢?
现在引入更多的线程,每个滑稽吃的鸡更小了,速度更快了
(与之对应的,如果搞四套房间,成本就更高了)
此时这些滑稽老师,共享的同一份资源
引入的滑稽,是越多越好吗??
当引入的线程,达到一定数量之后,在继续尝试引入新的线程,好像就没有办法提升了
桌子坐不下了
当线程数量太多的时候,线程之间就会相互竞争CPU的资源(CPU核心数是有限的)
非但不会提高效率,反而还会增加调度 的开销
多线程问题还有一个重要的问题,线程之间,可能会打架
比如,一号滑稽和2号滑稽看上了同一个鸡大腿,同时伸手去拿,谁能拿到???存在诸多变数!!!!!!!线程之间起了冲突,就可能会导致代码中出现一些逻辑上的错误(线程安全问题)
多线程这种方式,不太好驾驭,主要还是因为这个东西,有一定的复杂
多线程还有一个问题,共享资源也会有副作用
1号和2号抢鸡大腿的时候,1号抢到了,2号没抢到,2号滑稽很生气
一个线程如果抛出异常,并且没有处理好,就可能会导致整个进程被终止
小结:
1,进程是包含线程的
2,每个线程,也是一个独立的执行流,可以执行一些代码,并且单独的参与到CPU的调度中。(状态,上下文,优先级,记账信息,每个线程都有自己的一份)
3.每个线程,有自己的资源,进程中的线程共用这一份资源(内存空间和文件描述符表)
进程是资源分配的基本单位,线程是调度执行的基本单位
4.进程和进程之间,不会相互影响,如果同一个进程中的某个线程,抛出异常,是可能会影响到其他线程,会把整个进程中的所有线程都异常终止
5,线程也不是越多越好,要能够合适。如果线程太多了,调度开销可能非常明显。
6.同一个进程中的线程之间,可能会相互干扰,引起线程安全问题
Q:如果面试官让你,转前端?转android?转测试行不行???
必须行!!!!!
多线程编程
写代码的时候,可以使用多进程进行并发编程,也可以使用多线程进行并发编程
在Java中 不太推荐 很多和多进程编程相关的api,在Java标准库中,都没有提供
多线程在并发编程的时候,效率更高(频繁创建销毁的时候)
尤其是对于Java进程,是要启动Java虚拟机的
启动Java虚拟机,这个事情的开销更大
搞多个Java进程就是多个Java虚拟机
系统提供了多线程编程的api ,java标准库,把这些api封装了在代码中就可以使用了
java中提供的api,Thread这样的类
Demo 实例文章来源:https://www.toymoban.com/news/detail-850729.html
看一些第三方库文档 当开始上手,就应该要找demo/tutor/example/get strat文章来源地址https://www.toymoban.com/news/detail-850729.html
到了这里,关于进程线程的关系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!