这里先引入两 个概念:
线程 : Thread 进程:Process
想要了解线程,需要先了解一下进程.
进程的概念: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(想要了解更多内容(https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503 ))
线程的概念:线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。在单个程序中同时运行多个线程完成不同的工作,称为多线程。(想要了解更多内容(https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101))
程序 和 进程 的关系:
程序是静态的,实质 为 一套指令的集合
程序一旦被 加载到内存中,被CPU执行,则会相应地产生一个或多个进程(动态的).
关闭进程,则其相对应的 程序运行 被终结
为什么提出线程的概念:
一个进程中可能包含多个子任务,多个子任务可以独立运行.而每个线程对应一个子任务,cpu可以对各个线程进行独立调度
使得cpu调度的粒度更细,从而降低进程间切换的资源消耗.
cpu的调度问题:
这里涉及到 时间片的理念:
将cpu的执行时间视作一种资源,为了使计算机支持多任务模式,需要岁cpu的执行时间进行小粒度切分.
切分后,可以将时间片分配多个程序使用(时间片不应过长,防止资源被一个进程长时间占领使用.
也不应过短,导致资源浪费在进程间的切换)
(可以看做一个比喻:两个人用一根笔,每一个人使用时间不应过短(比如每个人用2秒),否则时间都浪费在了轮换交接中,
时间也不应过长(比如2小时),一个人长时间占领资源,而另一个人则一直在等待资源被释放,资源利用率低下)
对于单核cpu的计算机
从宏观的角度来看: 计算机可以同时处理多个任务(音乐,视频,文档,浏览网页…).
从微观的角度来看:计算机在某个时刻,只有一个任务在执行(任务间切换的时间非常短,
让人产生错觉以为是多任务同时进行).(可类比动画的 机理,当静态的画面以一定速度翻阅,就会产生动画的效果)