并发编程 80 道面试题及答案 并发编程是指在同一个程序中可以同时运行多个不同的线程来执行不同的任务,以提高 CPU 的利用率和应用性能。并发编程的优点是可以充分利用多核 CPU 的计算能力,方便进行业务拆分,提升应用性能。 并发编程的三个必要因素是: 1. 原子性:一个或多个操作要么全部执行成功要么全部执行失败。 2. 可见性:一个线程对共享变量的修改,另一个线程能够立刻看到。 3. 有序性:程序执行的顺序按照代码的先后顺序执行。 在 Java 程序中,可以使用 synchronized、volatile、LOCK 等方法来保证多线程的运行安全。 并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度。但是, 并发编程并不总是能提高程序运行速度的,且可能会遇到很多问题,如内存泄漏、上下文切换、线程安全、死锁等问题。 出现线程安全问题的原因一般都是三个原因: 1. 线程切换带来的原子性问题 解决办法:使用多线程之间同步 synchronized 或使用锁(lock) 2. 缓存导致的可见性问题 解决办法:synchronized、volatile、LOCK,可以解决可见性问题 3. 编译优化带来的有序性问题 解决办法:Happens-Before 规则可以解决有序性问题 并发和并行有什么区别? 1. 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流执行,从逻辑上来看那些任务是同时执行。 2. 并行:单位时间内,多个处理器或多核处理器同时处理多个任务,是真正意义上的“同时进行”。 3. 串行:有 n 个任务,由一个线程按顺序执行。 多线程的定义:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。多线程的好处可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。 多线程的劣势: * 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多。 * 多线程需要协调和管理,所以需要 CPU 时间跟踪线程。 * 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。 线程和进程的区别: * 进程是一个在内存中运行的应用程序。每个正在系统上运行的程序都是一个进程。 * 线程是进程中的一个执行任务(控制单元),它负责在程序里独立执行。 * 进程与线程的区别: 1. 资源开销:每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 2. 包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。 3. 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程与进程之间的地址空间和资源是相互独立的 4. 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃有可能导致整个进程都死掉。 5. 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行 6. 根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位 什么是上下文切换?上下文切换是指多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。上下文切换通常是计算密集型的,也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。
剩余38页未读,继续阅读
- 粉丝: 31
- 资源: 4991
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 飞尔.飞尔.飞尔.飞尔.飞尔.飞尔.飞尔
- 儿童编程启蒙-Scratch图形化编程语言应用和教程
- Wallpaperpro 面板
- 算法部署-使用TensorRT部署图像分割算法PIDNet-优质算法部署项目实战.zip
- GiliSoft USB Stick Encryption(U盘加密保护) V10.0注册版
- 算法部署-使用TensorRT部署超轻量化人脸识别算法UltraFace-优质算法部署项目实战.zip
- 算法部署-使用TensorRT8+ROS2部署YOLOX目标检测算法-优质算法部署项目实战.zip
- 算法部署-使用TensorRT+YOLOv5实现头盔检测算法-优质算法部署项目实战.zip
- 算法部署-使用TensorRT+Python部署RetinaFace人脸检测算法-优质项目实战.zip
- 算法部署-使用TensorRT+Python部署MoE模型-优质算法部署项目实战.zip