并发编程就是实现让程序同时执行多个任务,而如何实现并发编程呢,这里就涉及到进程和线程这两个概念。
对于操作系统来说,一个任务(或者程序)就是一个进程(Process),比如打开一个浏览器是开启一个浏览器进程,打开微信就启动了一个微信的进程,打开两个记事本,就启动两个记事本进程。
操作系统以进程为单位分配存储空间,每个进程有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据;
进程可以通过fork或者spawn方式创建新的进程来执行其他任务
进程都有自己独立的内存空间,所以进程需要通过进程间通信机制(IPC,Inter-ProcessCommunication)来实现数据共享,具体的方式包括管道、信号、套接字、共享内存区等
一个进程还可以同时做多件事情,比如在Word里面同时进行打字、拼音检查、打印等事情,也就是一个任务分为多个子任务同时进行,这些进程内的子任务被称为线程(Thread)。
因为每个进程至少需要完成一件事情,也就是一个进程至少有一个线程。当要实现并发编程,也就是同时执行多任务时,有以下三种解决方案:
多进程,每个进程只有一个线程,但多个进程一起执行多个任务;
多线程,只启动一个进程,但一个进程内开启多个线程;
多进程多线程,即启动多个进程,每个进程又启动多个线程,但这种方法非常复杂,实际很少使用
注意:真正的并行执行多任务只有在多核CPU上才可以实现,单核CPU系统中,真正的并发是不可能的,因为在某个时刻能够获得CPU的只有唯一的一个线程,多个线程共享了CPU的执行时间。
下一篇:Java中的常见语法糖块