多线程
进程:一般指程序中运行的程序,实际作用是为程序再执行过程中创建好所需的环境和资源。
线程:是进程的一个实体,是cpu用来调度执行程序的最小单元,一个进程可以拥有多个线程。
单线程:进程中只有一个线程,只执行一个线程。
多线程:同一时刻,可以执行多个线程
并发:一段时间内,同时做多件事情
并发是同一时刻,只执行一个线程。但是多个线程被快速的交替执行,使得再宏观上有了多线程同时执行的假效果。但是在微观上不是同时执行的,只是把时间分成若干段,使得多个线程快速的交替执行。
并行:同一时刻,做多件事情
指同一时刻,有多个线程再多个处理器上同时执行,无论从宏观还是微观来看,这些线程都是一起执行的。
那么多线程到底是并发还是并行呢?
单处理器下,多线程一定是并发执行的。
多处理器下,当线程个数小于或等于处理器个数时,多线程是并行的;当线程个数大于或等于处理器个数时,多线程是并发和并行都可能执行
同步与异步:
同步:等待前一个任务结束后,再执行下一个任务,无并发或者并行概念
异步:多个任务,同时执行
多线程同步:
当有一个线程对内存某一块地址操作时,不允许其他线程对这个内存地址进行操作,直到该线程操作完成。
应用:在使用多线程开发的过程中,一些敏感的重要的数据不允许多个线程同时访问,此时就需要多线程同步技术,保证数据在任何时刻,最多有一个线程访问。
多线程异步三大特性:
可见性:当多个线程访问同一个变量时,一个线程修改了这个变量值,其他线程能够立即看到修改后的值。
原子性:即一个操作或者多个操作,要么全部执行(执行的过程中不被任何因素打断),要么就都不执行
有序性:即程序的执行按照代码的先后顺序执行。
死锁:
互斥性:当一个资源被线程使用的时候,别的线程不能使用。
不可抢占性:资源请求者不可强制从资源拥有者中抢夺资源。
占有且等待性:资源请求者在等待其他资源时,保持对原有资源的占有。
循环等待性:线程1等待线程2占有的资源,线程2等待线程1占有的资源。
线程池:线程池就是存储线程的池子,里面是一组已经创建好的线程,随用随取,用完了不销毁,供给后续使用。
异步编程模型
EAP:基于事件的异步模型
TPL:基于任务(Task)的异步编程模型
APM