我们举个例子,假设你要编写一个视频播放器软件,那么该软件功能的核心模块有三个:
从视频文件当中读取数据;对读取的数据进行解压缩;把解压缩后的视频数据播放出来;
对于单进程的实现方式,我想大家都会是以下这个方式:
对于单进程的这种方式,存在以下问题:
播放出来的画面和声音会不连贯,因为当 CPU 能力不够强的时候,Read 的时候可能进程就等在这了,这样就会导致等半天才进行数据解压和播放;各个函数之间不是并发执行,影响资源的使用效率;
那改进成多进程的方式:对于多进程的这种方式,依然会存在问题:
进程之间如何通信,共享数据?维护进程的系统开销较大,如创建进程时,分配资源、建立 PCB;终止进程时,回收资源、撤销 PCB;进程切换时,保存当前进程的状态信息;
那到底如何解决呢?需要有一种新的实体,满足以下特性:
实体之间可以并发运行;实体之间共享相同的地址空间;
这个新的实体,就是线程( Thread ),线程之间可以并发运行且共享相同的地址空间。