参考资料:
进程与线程的一个简单解释
程序员的自我修养(二):操作系统、进程与线程
计算机底层知识拾遗(二)深入理解进程和线程
进程与线程的区别
单核处理器、多核处理器、多处理器与多线程编程

计算机的组成

经典的冯·诺伊曼结构把计算机分为CPU、存储器、IO设备 构成的现代计算机的三个核心部分。我们常说程序执行过程中所需要的资源指的就是其中的CPU和存储器。

CPU中央处理器由算术逻辑单元(ALU)和控制系统两部分组成。CPU只用来提供计算资源,计算资源的分配由操作系统处理。

算数逻辑单元(ALU)是计算机的大脑,它提供两类计算:算数运算和比较运算。 控制系统的功能是从存储器和输入输出设备中读取指令和数据,对指令进行解码, 并向ALU交付匹配指令要求的正确输入,告知ALU对这些数据做哪些运算并将结果数据返回到何处。

存储器指的是内存,是CPU能直接寻址的存储空间,内存的主要特点是访问速率快。内存是电脑中的主要部件,它是相对于外存而言的。我们平常使用的程序,如Windows操作系统、打字软件、游戏软件等,一般都是安装在硬盘等外存上的,但仅此是不能使用其功能的,必须把它们调入内存中运行,才能真正使用其功能,我们平时输入一段文字,或玩一个游戏,其实都是在内存中进行的。就好比在一个书房里,存放书籍的书架和书柜相当于电脑的外存,而我们工作的办公桌就是内存。通常我们把要永久保存的、大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上,当然内存的好坏会直接影响电脑的运行速度。

IO(输入输出)设备是计算机从外部世界接收信息和向外部世界反馈运算结果的手段。对于一部标准的个人电脑,输入设备主要有键盘和鼠标,输出设备则是显示器、打印机以及其他许多后文将要讨论的可连接到计算机上的I/O设备。

操作系统

操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。以现代标准而言,一个标准PC(Personal Computer)的操作系统应该提供以下的功能:

进程管理(Processing management) 内存管理(Memory management) 文件系统(File system) 网络通信(Networking) 安全机制(Security) 用户界面(User interface) 驱动程序(Device drivers)

计算机硬件能力是有限的,为了充分发挥计算机计算和存储能力,就需要使计算机在尽可能短的时间处理更多的事情。

在多任务系统中,操作系统接管了所有硬件资源并持有对硬件控制的最高权限。在操作系统中执行的程序,都以进程的方式运行在更低的权限中。所有的硬件资源,由操作系统根据进程的优先级以及进程的运行状况进行统一的调配。

是什么

简单的说进程是操作系统进行资源(即:CPU和存储器)分配的最小单元,线程是操作系统调度的最小单元。

随着 CPU 频率增长逐渐停滞,CPU 开始向多核的方向发展。为了让多个 CPU 核心同时为我们工作,并行地执行任务,就需要涉及线程的概念。线程的英文是 Thread,有时也称为轻量级进程 (Lightweight Process),它是操作系统进行任务调度的最小单元。线程存活于进程之中;同一个进程中的线程,共享一个虚拟内存空间,以及其中的资源,所以线程间通信可以通过其共享的内存实现;线程之间各自持有自己的线程 ID、当前指令的指针(PC)、寄存器集合以及栈。

进程与程序

进程则是一个程序的执行过程。计算机上的程序是指令和数据的集合,是一个静态的概念,本身没有运动的概念。

使用多线程的优势

  • 将等待 I/O 操作的时间,调度到其他线程执行,提高 CPU 利用率;
  • 将计算密集型的操作留给工作线程,预留线程保持用户的交互;
  • 在多 CPU/多核计算机下,有效吃干计算能力;
  • 相比多进程的程序,更有效地进行数据共享(在同一个进程空间)。

线程安全

由于同一进程中的多个线程共享该进程的数据,所以当多个线程对同一份数据进行写入操作的时候容易引起线程安全问题。

同步与锁

在这里,同步是一种规则,而锁则是实现这种规则的具体方法。

所谓同步,指的是多线程程序里,多个线程不得同时对某一共享变量进行访问。锁是实现同步的一种具体方案——准确地说,这是一种非常强的方案。锁有多种形式,最符合直觉的锁是所谓的互斥量(Mutex)。具体来说,线程在访问某个共享变量的时候,必须先获取锁;如果获取不到锁,那么就必须等待(或者进行其他操作,总之不许访问这个变量);在结束对这个变量的访问之后,持有锁的线程应当释放。

值得一提的是,锁作为一种同步手段,是非常强的。但是,这种强,仅限于逻辑层面。在实际情况中,编译器优化、CPU 动态调度,都有可能打破锁对于同步的保护。这时候,这些优化就变成了过度优化。

Copyright © shuoliu.com 2018 all right reserved,powered by Gitbook该文件修订时间: 2018-09-03 03:46:41

results matching ""

    No results matching ""