(进程、线程),(并行、并发),(同步、异步)的理解

1、进程和线程

1.1、进程和线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIIdLGyB-1607654523249)(C:/Users/lenovo/AppData/Roaming/Typora/typora-user-images/image-20201127095900340.png)]

1.2、并行和并发

单核cpu下,线程实际上还是串行执行的,操作系统中有一个组件,叫做任务调度器,将cpu的时间片交给不同的线程使用,只是由于cpu在线程间(时间片很短)的切换非常快,人类感觉是同时运行的。总结一句话就是:微观串行,宏观并行

一般会将这种线程轮流使用cpu的做法称为并发。

而并行是在多核cpu的情况下,可以真正的同时执行多个线程。

总结来说:

  • 并发(concurrent)是同一时间应对(dealing with)多件事情的能力。
  • 并行(parallel)是同一时间动手做(doing)多件事情的能力。

1.3、同步和异步

  • 同步等待
/**
 * 同步等待
 */

public class Sync {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("hello");
        System.out.println("world");
    }
}

在这里插入图片描述

do other things必须等待前面操作完成

  • 异步不等待

    /**
     * 异步不等待
     */
    public class Async {
        public static void main(String[] args) {
            new Thread(() -> {
                System.out.println("hello");
            },"Thread1").start();
            System.out.println("world");
        }
    }
    

在这里插入图片描述

world不必等待前面完成

多线程可以让方法的执行变成异步的(即不要干巴巴的等),比如读取磁盘文件,假设读取操作花费了5秒,如果没有线程调度技术,这5秒调用者什么也做不了,其他代码都得暂停。

结论:

  1. 需要等待结果返回,才能继续运行就是同步
  2. 不需要等到结果返回,就能继续运行就是异步

1.4、总结

1、单核cpu下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用cpu,不至于一个线程总占用cpu,别的线程没法干活。

2、多核cpu可以并行跑多个线程,但能否提高运行效率还是要分情况的

  • 有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率,但不是所有计算

任务都能拆分。

  • 也不是所有任务都需要拆分,任务的目的如果不同,谈拆分和效率没有意义。

3、IO操作不占用cpu,只是我们一般拷贝文件使用的是【阻塞IO】,这时相当于线程虽然不适应cpu,但是

需要一直等待IO结束,没能充分的利用线程,所以才有后面的【非阻塞IO】和【异步IO】优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值