JUC-01

目录

线程与进程的区别:

并发:

 并行:

运行效率 

异步调用:

 单核多核处理多线程单线程性能例子:


 

线程与进程的区别:

进程:用来加载指令(操作)至CPU中,读取数据进内存的;相当于是管理数据与指令,IO的;

当一个程序被执行时,进程就会被开启,指令被加载到CPU读取操作(后面会给指令分配时间片),将磁盘中的数据加载到内存中;

线程:具体是执行指令的,一个线程就是一个指令流,你可以理解为进程是储存线程的,一个进程里面可以有多个线程,进程会给线程分配资源,以此给他执行;


1. 进程是相互独立的,一个进程拥有的内存空间可以供给他内部的线程共享,比如int a等等;

2.不同之间的计算机之间的进程通信要通信要遵守HTTP协议,比如说就是一个客户端和你的服务器之间进行通信就需要遵守这个协议;

3.线程的话,可以访问进程内存空间中的共享变量,因为进程的话他是拥有共享资源的;


并发:

简而言之就是,多个线程在一个cpu上,(线程是用来执行指令流的),cpu会利用任务调度器将cpu的时间片给到不同的线程上,给他们进行串行执行(就是线程轮流使用),并发就是——>微观串行,宏观并行;

同一时间,应对多件事情,给多件事情分配时间;

 并行:

多核cpu,每个核都可以调度运行线程,执行指令流,这是同时发生的情况;当然,一般来说,并行与并发都是可以发生的,因为我们的线程一般来说是比核要多的,所以说并行的话至少加快了效率罢了,(我认为:多核就是在并发的基础上增加了并行的效果,增快线程执行速率);

同一时间做多件事情;

 


运行效率 

 多核CPU的话,可以并行同时处理多个线程,而花费时间=最长的时间+汇总时间

 串行的话就一个个线程来,时间较长


 

异步调用:

 同步:

要等待前面的完成之后才能继续进行,以下例子只有一个线程

在多线程中,让多个线程步调一致也是同步

 异步:

不需要等待结果返回,还能继续运行

package JUC;

/**
 * @author diao 2022/3/31
 */

public class test01 {
    public static void main(String[] args) {
        new Thread(()-> System.out.println("你好")).start();
        System.out.println("你也好");
    }
}

 会发现下面的打印在上面,所以说它并没有等待上面的执行完才执行——>异步;

场景例子:

像我们做项目的时候,上传文件,肯定不能用同步,我们用异步的话,当你点击上传触发事件,开启一个新的线程处理视频转换,这样的话速率较快,不会影响主线程,我们的ajax也就是这么来的吧,不影响主地址栏,触发事件(也就是相当于一个新的线程,新的请求路径给到控制器处理);


 单核多核处理多线程单线程性能例子:

多核上:

比如一亿个数,如果你是多个线程处理,每个线程处理一些,那么他就会比单个线程处理所有数要快;——>在多核情况下前者快,因为多个线程可以被同时处理,速度较快;

但是,在单核,比如linux中的话

你多个线程,被串行执行,重点:线程切换会耗费一定时间,所以此时他的性能并没有提升;还没有单线程快;

多线程意义:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值