JAVA并发编程学习笔记01-基本概念

进程和线程的区别

百度往往得到的答案是:“进程是资源分配的最小单位,线程是CPU调度的最小单位”,十个有九个看不明白,太官方。

  • 进程:可以理解为我们window上的一个程序(一个程序可能包含一个或多个进程)。
  • 线程:进程中的一个执行任务,一个进程可以包含多个线程 。

进程切换和线程切换

最初计算机都是依靠进程切换来完成CPU的调度的,而不同的进程,对应不同的虚拟地址空间,切换时,涉及到该空间的切换。而线程属于进程,当多个属于同一进程的线程之间的切换时,是不涉及到虚拟地址切换的问题的,开销自然少了很多,故现在的操作系统都是依赖线程切换来完成CPU的调度的。

并发编程的三个概念

首先要明白一个概念,CPU、内存、IO三者之间的速度存在着巨大的差异(CPU > 内存 > IO),但往往性能的瓶颈取决的木桶最短的那个木板,硬件工程师们为了平衡三者之间的差异,做出了如下的优化:

  1. CPU增加了缓存(三级缓存,有兴趣的可以自行百度),以拉近与内存之间的差异;
  2. 增加了进程、线程的概念,复用CPU,进而增加CPU的使用效率,来拉近与IO之间的差异;
    CPU缓存和内存直接的关系
    在理解了上面两个概念后,我们其实可以类比日常开发使用的技术,比如IO多路复用(NIO)、平常说的,用redis增加缓存,减少数据库的操作(redis对应内存,数据库是IO操作,内存更快)等。接下来,我们介绍下有关并发编程的三个重要概念:

可见性

概念:一个线程对共享变量的修改,另一个线程能够立即看到,我们成为可见性
对着上面的原型图,当两个线程运行在不同的CPU上时,他们操作的CPU缓存分属于不同的CPU,相互是独立的,故要保证数据可见性,需要借助中间的内存来做同步操作。在单核时代,只有一个CPU,对应的缓存也只有一个,故不存在同步的问题(类比线程1和线程2);

原子性

概念:一个或多个操作,在CPU执行过程中,要么全部成功,要么全部失败
线程切换其实会带来原子性问题,这里回顾下进程和线程的知识,一个进程包含多个线程,一个线程包含多个执行命令,而CPU在线程切换时,是发生在每个执行命令执行完的时候。我们平常使用的高级语言,发送的一条命令,往往对应计算机多条执行命令,最常见的,num++操作,刚接触java的时候也以为它是原子性的,其实不然,它对应3条命令:从内存中读取num的值到CUP缓存、执行+1操作,将结果写回内存中。

有序性

概念:顾名思义,就是程序按照代码指定的先后顺序执行

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a + b);
    }

如上面的代码所示,编译器可能会先执行b = 2的操作,再执行a = 1的操作。编译器在保证最终结果与代码执行结果一致的前提下进行优化,这种情况叫指令重排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!很高兴回答你关于Java并发编程的问题。请问你想知道什么方面的内容呢?我可以分享一些学习笔记和建议给你。 1. 并发编程基础:了解并发编程基本概念,如线程、进程、锁、同步等。学习Java中的并发编程模型以及相关的API,如Thread、Runnable、Lock、Condition等。 2. 线程安全性:学习如何保证多线程环境下的数据安全性,了解共享资源的问题以及如何使用同步机制来防止数据竞争和并发问题。 3. 线程间的通信:掌握线程间的通信方式,如使用wait/notify机制、Lock/Condition等来实现线程的协调与通信。 4. 并发容器:学习并发容器的使用,如ConcurrentHashMap、ConcurrentLinkedQueue等。了解它们的实现原理以及在多线程环境下的性能特点。 5. 并发工具类:熟悉Java提供的并发工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们可以帮助你更方便地实现线程间的协作。 6. 并发编程模式:学习一些常见的并发编程模式,如生产者-消费者模式、读者-写者模式、线程池模式等。了解这些模式的应用场景和实现方式。 7. 性能优化与调试:学习如何分析和调试多线程程序的性能问题,了解一些性能优化的技巧和工具,如使用线程池、减少锁竞争、避免死锁等。 这些只是一些基本的学习笔记和建议,Java并发编程是一个庞大而复杂的领域,需要不断的实践和深入学习才能掌握。希望对你有所帮助!如果你有更具体的问题,欢迎继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值