1.并发编程的优缺点
优点
充分利用了多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到了极致(因为在一个线程中,还有等待输入等操作),性能得到提升
缺点
并发编程的目的就是为了提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到比如:内存泄漏、上下文切换、线程安全、死锁等问题
2.并发编程的三要素是什么
并发编程的三要素:
- 原子性:原子性指的是要么一个或多个操作全部执行成功,要么全部执行失败,是一个不可分割的整体,具体到计算机,就是cpu不可以在中途暂停然后再调度,要不就执行完成,要不就不执行
- 可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到,可见性表示的是如果有线程更新了某一个共享变量的值,则其他线程要能够立即感知到最新的内容
- 有序性:程序执行的顺序按照代码的先后顺序执行
出现线程安全问题的原因:
- 线程切换带来的原子性问题:因为在多线程情况下,线程的切换可能会导致某个操作的原子性遭到破坏
- 缓存导致的可见性
- 编译优化带来的有序性问题
3.什么是多线程,以及多线程的优劣势
多线程的定义:
多线程是指程序中包含多个执行流,即一个程序中可以同时运行多个不同的线程来执行不同的任务
多线程的优势:
可以提高CPU的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是让CPU进行空转,这样就大大提高了程序的执行效率
多线程的劣势:
- 线程也是程序,所以线程需要占用内存,线程越多占用的内存越多
- 多线程之间对共享资源的访问会相互影响,会造成共享资源的竞争问题
4.进程和线程的区别
- 根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
- 资源开销:进程之间的切换会有较大的开销,线程之间的切换开销比较小
- 包含关系:一个进程可以包含多个线程,线程又称为轻量级进程
- 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
- 影响关系:一个进程崩溃之后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃之后,整个进程都崩溃(原子性问题),所以多进程要比多线程强壮
- 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制