线程知识的学习 一
2015-09-30 20:53
260 查看
线程之上——进程
在开始这篇博客主题——线程 之前,我们先来了解一下线程周边的一些概念,任何东西都不是孤立的,要想深入的理解一个知识,了解它的来源,它的环境是很重要的。那么线程的周边是什么样的环境呢?首先,线程的大环境是操作系统,其次是让线程运动起来的大Boss——进程。操作环境,这个太复杂,这里不说了。我们来简要的说说进程这大Boss。
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,比如在Windows系统中,一个运行的exe就是一个进程。也就是说
程序本身并不能单独运行,只有将程序装载到系统的内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。所以程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
我截取了本机的操作系统中的图来说明(任务管理器),看完图,相信进程已经在你心中有位置了。
由图也可以说明,我们的操作系统是多任务的操作系统。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU。
线程和进程的关系这里有一个很好的解释与大家共享:线程和进程的趣解
还有一点就是:进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们才称其为进程。
接下来,我们主要来说线程。
执行任务的兵——线程
什么是线程呢?—— 兵第一段中说到了进程是一个执行着的程序,那么怎么执行?答案就跟线程有关。进程带着任务来到操作系统中,然后找了几个人帮他实现这个功能,这就是所谓的:一个进程中可以启动多个线程。线程就是真正干活的兵。它的直接上司是进程。每个线程的任务是进程分派给它的。
举个小例子:如果把我们上课的过程看成一个进程的话,那么我们要做的是耳朵听老师讲课,手上还要记笔记,脑子还要思考问题,这样才能高效的完成听课的任务。那么我们把这三种分工:耳朵,手,脑子叫做线程,只有这三个 “兵” 结合起来,这个听课的任务算是合格的完成了。话又说回来了,如果其中一个线程 罢工,例如,手罢工了,那么这个听课效率就不高,或者说,手是在耳朵和脑袋之后才开始的工作,那么同样是听课一件事,把 “手做笔记” 放到了 “耳朵,脑子” 之后,那么就是延长了听课的时间,这就好比进程的效率没有,这就是我们平常说的性能问题吧。
以上的例子,还说明了一个问题,耳朵,脑子,手,在同一时间内工作,这就是并发,难道这就是我们所谓的并发编程?多线程?
那么,我们来围绕线程来谈谈线程的这些事情,先看一张宏观的图如下:
接下来的几篇博客,我们将按照图中的索引号来一起开始我们的线程之行。
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- IE7降低内存和降低CPU的几个技巧
- C#线程间不能调用剪切板的解决方法
- 如何高效的使用内存
- DOS下内存的配置
- XP/win2003下发现1G的内存比512M还慢的解决方法
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- C#线程队列用法实例分析
- SQL语句实现查询SQL Server内存使用状况
- C#实现判断操作系统是否为Win8以上版本
- C语言内存对齐实例详解
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码