线程和进程
- 计算机教材上的经典定义如下:
线程是操作系统调度的基本单位;进程是操作系统资源分配的基本单位。
线程和进程属于一个抽象的概念,具体实现还得看具体的操作系统。Linux 内核的实现上来说,线程和进程没有本质区别,都是struct_task 结构体。
从命名上来看,这个task 可以说是很贴切不过了, linux认为一个个的线程不就是用户交给计算机的一个个任务吗?
操作系统的核心工作就是利用有限的硬件资源去高效完成用户交给的一个个任务,所以产生了一系列的调度策略,调度的对象在kernel中的就是 这个struct_task;
而做任务必然涉及到硬件资源的协助:比如RAM,如何管理内存也是所有操作系统必须解决的问题之一。简单来说,操作系统使用虚拟内存来平等对待每个用户空间进程,每个进程独立拥有的虚拟地址空间,位于同一个进程的线程共享同一内存空间。
另外说一下,进程在kernel的实现其实就是线程组owner。
并发和并行
并发:是指同一时间段,有多个任务同时运行,比如你在单核计算机上同时打开QQ 和word, QQ 和word这两个进程并发;但在微观上,同一时刻只有一个进程在运行,只是操作系统在极短的时间内在不同的任务间切换,造成了宏观上多个任务同时运行的假象。
并行:这个是真正意义上的同一时刻有多个任务同时运行,这需要多个CPU才能完成。