> 文档中心 > 并发编程基础底层原理学习(二)

并发编程基础底层原理学习(二)

进程

进程就是 应用程序在内存中分配的空间,也就是正在运行的程序 ,各个进程之间互不干扰。同时进程保存着程序每一个时刻运行的状态。进程的两个基本元素是程序代码和与代码关联的数据集。进程执行的任意时刻包含了以下元素:

  • 标识符:与进程相关的唯一标识符,用来区分其他线程
  • 状态:若进程正在执行,则进程处于运行态
  • 优先级:相对于其他进程的优先顺序
  • 程序计数器:程序中即将执行下一条指令的地址
  • 内存指针:包括程序代码和进程相关数据的指针
  • 上下文数据:进程执行时处理器的寄存器中的数据

线程

现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个线程里可以创建多个线程。进程中拥有一个或多个线程,在线程中有一个程序计数器,用来记录接着要执行哪一条指令。线程拥有寄存器,用来保存线程当前的工作变量,线程还拥有一个堆栈,用来记录执行历史,其中每一帧保存了已调用但是还没有从中返回的过程。

上图展示了线程在运行的生命周期中6种不同的状态,在给定的一个时刻,线程只能处于其中的一个状态。

进程和线程的区别

进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是 是否单独占有内存地址空间及其它系统资源(比如I/O) :

  • 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。
  • 进程单独占有一定的内存地址空间,一个进程出现问题不会影响其他进程,不影响主程序的稳定性,可靠性高;一个线程崩溃可能影响整个程序的稳定性,可靠性较低。
  • 进程单独占有一定的内存地址空间,进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销较大;线程只需要保存寄存器和栈信息,开销较小

 

作为一个普普通通的程序员,如何才能提升自己的能力,在职场上拥有一技之长,这也成为普通的你我,迫切的需求。

拥有什么样的能力才能不被淘汰?答案是:高并发,它几乎成为了每个程序员都想要拥有的经验。

原因很简单:流量是大的电商公司必要的需求,比如,淘宝的双十一会产生大量的高并发,用户上亿,一天的流量就是几十亿,高峰期的并发量上十万。所以,如何抗住高并发,是这种大公司需要面对的。

所以,你要是掌握了这项技术,工资蹭蹭地往你兜里钻。

基础-实战-源码-面试-系统架构阿里巴巴深入理解高并发编程电子书感兴趣的朋友请点赞转发加关注,资料我放在了文末

《深入理解高并发编程》

一、基础案例篇

  • 工作了3年的程序员小菜面试高并发岗位被吊打虐哭

  • 导致并发编程频繁出问题的“幕后黑手”

  • 解密诡异并发问题的第一个幕后黑手——可见性问题

  • 解密导致并发问题的第二个幕后黑手——原子性问题

  • 解密导致并发问题的第三个幕后黑手——有序性问题

  • 如何解决可见性和有序性问题?这次彻底懂了!

  • synchronized原理

  • 为何在32位多核CPU_上执行long型变量的写操作会出现诡异的Bug问题?

  • 如何使用互斥锁解决多线程的原子性问题?

  • ThreadLocal学会了这些,你也能和面试官扯皮了!

  • 学好并发编程,关键是要理解这三个核心问题

  • 什么是ForkJoin?看这一篇就够了 !

  • 你知道吗?大家都在使用Redisson实现分布式锁了! !

  • 为何高并发系统中都要使用消息队列?

  • 高并发环境下如何优化Tomcat配置?看完我懂了!

  • 不废话,言简意赅介绍BlockingQueue

  • 高并发环境下如何防止Tomcat内存溢出?

  • 高并发下常见的限流方案

  • Redis如何助力高并发秒杀系统?看完这篇我彻底懂了! !

  • 一文搞懂PV、UV、W、IP及其关系与计算

  • 优化加锁方式时竟然死锁了! !

  • 如何使用互斥锁解决多线程的原子性问题

  • 高并发环境下诡异的加锁问题(你加的锁未必安全)

  • 高并发场景下创建多少线程才合适?一条公式帮你搞定! !

  • 终于弄懂为什么局部变量是线程安全的了! !

  • 线程的生命周期其实没有我们想象的那么简单! !

image

image

image

二、实战案例篇

  • 如何实现亿级流量下的分布式限流?这些理论你必须掌握! !

  • 如何实现亿级流量下的分布式限流?这些算法你必须掌握! !

  • 亿级流量场景下如何为HTTP接口限流?看完我懂了! !

  • 亿级流量场景下如何实现分布式限流?看完我彻底懂了! !

  • 如何实现亿级流量下的分布式限流?

image

image

image

三、源码分析篇

PS:程序员究竟要不要读源码?

  • 线程与线程池

  • 线程的执行顺序

  • Java中的Callable和Future

  • SimpleDateFormat类的线程安全问题

  • 深度解析ThreadPoolExecutor类源码

  • 深度解析线程池中重要的顶层接口和抽象类

  • 从源码角度分析创建线程池究竟有哪些方式

  • 通过源码深度解析ThreadPoolExecutor类是如何保证线程池正确运行的

  • 通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

  • 通过源码深度分析线程池中Worker线程的执行流程

  • 从源码角度深度解析线程池是如何实现优雅退出的

  • 深入理解ScheduledThreadPoolExecutor与Timer的区别和简单示例

  • 深度解析ScheduledThreadPoolExecutor类的源代码

  • 深入理解Thread类源码

  • AQS中的CountDownL atch、Semaphore与CyclicBarrier

  • ReentrantLock

  • Threadl ocal学会了这些,你也能和面试官扯皮了!

  • 又一个朋友面试栽在了Thread类的stop0方法和interrupt()方法上!

image

image

image

四、面试篇

  • 面试官:讲讲高并发场景下如何优化加锁方式?

  • 面试官:讲讲什么是缓存穿透?击穿?雪崩?如何解决?

  • 面试官: Java中提供了synchronized,为什么还要提供Lock呢?

  • 面试官:说说缓存最关心的问题是什么?有哪些类型?回收策略和算法?

  • 面试官:性能优化有哪些衡量指标?需要注意什么?

  • 面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!

  • 如何设计一个支撑高并发大流量的系统?

  • 关于乐观锁和悲观锁,蚂蚁金服面试官问了我这几个问题! !

  • 关于线程池,蚂蚁金服面试官问了我这些内容! !

  • 高并发环境下构建缓存服务需要注意哪些问题?我和阿里P9聊了很久!

image

image

image

五、系统架构篇

  • 高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

  • 高并发分布式锁架构解密,不是所有的锁都是分布式锁! !

image

这篇高并发编程包含了基础-实战-源码-面试-系统架构五大篇幅,由浅入深能很好的帮助你提升高并发知识,提升系统的并发能力!

需要资料的小伙伴点赞+关注,关注下方公众号即可免费获取下载途径

字体下载