本文主要介绍多线程的几个基本概念,分清概念的同时对多线程编程才会有更加深入的了解
- 线程进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程是资源分配的基本单位,与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
——摘自百度百科
- 同步异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。
同步,就是调用某个方法是,调用方得主动等待这个调用返回结果才能继续往后执行。
异步,调用方调用后立即返回,调用者继续执行后续操作,被调用者通过某种方式来通知调用者,或者通过回掉函数来处理这个调用
- 线程间的互斥与同步
线程间的互斥是指多个线程同时操作某个临界资源时,该临界资源在同一个时间点,只能被某一个线程使用,如输入输出设备资源,打印机,当A线程访问打印机这个临界资源时,另一个线程B必须等待线程A操作结束后才可使用打印机。
线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。
展开来说就是,多个线程进行通信时,线程A与线程B按照一定的执行次序进行通信,线程B需要使用到线程A执行后的结果,当A没有进行生产时,B就不能进行消费,当B没有消费时,A就不能再继续生产数据。
- 阻塞非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。