码迷,mamicode.com
首页 > 编程语言 > 详细

[01] 进程和线程

时间:2018-01-09 11:43:33      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:body   span   多线程   上下文   文章   processes   and   需要   实体   


1、进程和线程是什么

在理解进程和线程之前,必须要知道的一个基本事实就是,单个CPU一次只能运行一个任务。我们所知道的多任务其实是因为CPU太快太快太快了,它不断在多个任务之间切换执行,以至于在我们看来他就是同时在执行多个任务,实则不然。

那么进程和线程是什么?

假设现在有这样的程序代码A和B,执行程序代码所需要的资源如RAM/显卡/GPS等(除了CPU),也即是程序代码的运行资源环境,我们暂且称之为程序的上下文。于是A和B在执行的时候:
  • CPU先加载程序A的上下文,然后执行A,保存程序A的上下文
  • 调入下一个要执行的程序B的上下文,执行B,保存B的上下文
  • ...

A的粒度实际上还显得太大,因为在其中还有代码片段a1,a2... 程序代码B同理。那么在执行A时,实际上是执行a1,a2,a3等等的过程,这里的代码片段a1/a2/a3,粒度更小,它们的上下文资源环境也都是共享的,即A程序代码的上下文。

于是进程和线程就来了,它们都是CPU工作时间段的利用,不过粒度大小不同
  • 这里的A/B就是进程
  • a1/a2/a3或b1/b2/b3就是线程

那么表象看来是什么呢?打开windows的任务管理器,你就可以看到很多个进程:
技术分享图片
 
进程就是一个可执行的程序的一次运行过程,它是系统进行资源分配和调度的一个独立单位。如我们打开QQ(TIM版),就是开了一个进程,在这个进程里,我们传输文字,开了一个线程;传输语音,又开了一个线程。线程是程序中的一个执行流,它是属于进程的, 每个线程都有自己专有的寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数

技术分享图片
 
所以,进程和线程的联系大概如下:
  • 一个线程只能属于一个进程,但是一个进程可以拥有多个线程
  • 系统资源分配给进程,同一进程中所有线程共享该进程的所有资源
  • 线程是指进程内的一个执行单元,也是进程内的可调度实体

在参考链接中,有一篇文章极其形象和容易理解,是阮一峰老师的《进程与线程的一个简单解释》,强烈强烈强烈推荐大家阅读了。

2、参考链接


[01] 进程和线程

标签:body   span   多线程   上下文   文章   processes   and   需要   实体   

原文地址:https://www.cnblogs.com/deng-cc/p/8250593.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!