Operating System-Thread(1)What and Why Thread &&进程和线程的对比
开始线程(Thread)之旅,作为程序员,打交道更多的是线程,各种多线程程序,并行编程都是以线程为基础进行的。本文主要内容:
- What and Why Thread
- 进程和线程的对比
一、What and Why Thread
1.1 What
线程是进程内部的执行单元,进程作为运行程序的实例用于把资源整个在一起,线程属于进程,线程作为在CPU上执行的实体而存在,CPU上运行的是线程,之前的文章说一个CPU在同一时间只能运行一个进程,这是个比较general的说法,准确的说法应该是一个CPU在同一时间只能运行一个进程的一个线程。
每一个进程拥有自己的独立地址空间,但是一个进程内的所有线程都共享所属进程的地址空间(当然包含数据)。
1.2 Why
先引入一个例子,一个Word进程,拥有三个线程(实际好像有30几个)。其中一个负责接受键盘的输入,一个负责自动保存,一个负责调整格式(比如删除一大段文字后Word的格式要马上调整过来)。

这个三个线程因为属于同一个Word进程,共享所有资源,即同一个Word文档,因为CPU真正运行的是线程,这三个线程可以实现并行,对于用户来说,对于Word操作的这三个操作好像也是同时进行的。从系统使用者的角度来说,针对同一个资源(进程)的操作也变成了并行(在单核状态下实际是伪并行,假象)。
因为有多个线程存在,在Word处理的时候,虽然系统一直在自动调整格式,在自动保存,但是用户的输入却从来感觉不到delay。
- 多核情况下,多个线程各自有CPU,绝对不会Delay
- 单核或者核数小羽线程数时,CPU会不停调度,给各个线程间隔分配资源,用户也不会感觉到明显的delay。
上面的这个例子是无法用进程实现的,假设将上面的三个线程换成三个进程,每个进程只有一个线程去做相应的事情,会出现什么情况呢?
- 三个进程会是三个Word文档
- 第一进程的线程执行Auto-Save,无法体现到用户真正编辑的文档上
- 第二个进程的线程执行Format也无法体现在当前用户编辑的文档上,
上面Word的例子也可以用在Excel中,比如Excel中的有些表格的值是用户输入的,另外一些表格的值是通过输入自动计算的,这里有两个线程即可,一个用于接受处理用户的输入,另外一个用于自动计算。
线程相比进程更加的轻量级,创建和销毁的开销会比进程小很多。在很多系统中创建一个线程要比创建一个进程快10-100倍。
二、线程和进程对比
先上一张图。T1、T2是隶属于进程Process1的线程;T3、T4是隶属于进程Process2的线程。

进程是在更加高一层的抽象,代表运行的程序,从用户的角度来说是一个看得见的应用,比如一个Word,一个Excel,一个等待输入的光标。进程在整个系统层面共享磁盘,文件,内存等等各种系统资源,进程之间的并行是用户最能感知的并行,用户会说我的电脑同时运行着两个Word,还要一个Excel。
最终的执行还是会落地到线程,线程隶属进程,是真正的执行单元,一个进程内部的线程共享当前进程地址空间和资源,当然每一个线程还是会有个性化的数据(会专门写文章介绍)。用户感知到的两个进程的并行(比如两个Word文档同时运行)其实最终还是两个Word文档内部线程之间的并行。
Operating System-Thread(1)What and Why Thread &&进程和线程的对比的更多相关文章
- 如何定位“Operating system error 32(failed to retrieve text for this error. Reason: 15105)”错误中被占用的文件
之前在这篇"Operating system error 32(failed to retrieve text for this error. Reason: 15105)"博 ...
- InnoDB: Operating system error number 87 in a file operation. 错误87的解决方法
InnoDB: Operating system error number 87 in a file operation. 错误87的解决方法 140628 8:10:48 [Note] Plugi ...
- Modern Operating System
No one can do all things, learn to be good at use what others already did. Most computers have two m ...
- Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别
一. java中实现线程的方式有Thread和Runnable Thread: public class Thread1 extends Thread{ @Override public void r ...
- The web application [] appears to have started a thread named [Abandoned connection cleanup thread] com.mysql.jdbc.AbandonedConnectionCleanupThread
01-Jul-2016 14:25:30.937 WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoade ...
- Thread message loop for a thread with a hidden window? Make AllocateHwnd safe
Thread message loop for a thread with a hidden window? I have a Delphi 6 application that has a thre ...
- 严重: The web application [] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it.
今日在重新部署项目时出现此问题,虽然对项目无影响,但问题就是问题.完整信息如下(使用idea工具): 十二月 05, 2015 11:44:27 上午 org.apache.catalina.star ...
- Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
- Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
随机推荐
- java jdk和android sdk的安装以及环境变量的配置
安卓环境变量设置 (烦)http://wenku.baidu.com/link?url=QRwpFhP8d0yJorhcvuZPrz3lNFQW-uwYg6TlZtv6uen6_SVsvRrzf0UJ ...
- ORACLE client 11g r2 客户端开发环境配置
一.安装ORACLE客户端,这里不做说明.需要注意的是,客户端解压位置应该在磁盘根目录下. 如果放在带中文字或者空格的文件名的路径下出了问题,可以放到磁盘根目录在安装.应该就会没有问题. 另外,一般安 ...
- iOS绘图CGContextRef详解
转自:http://blog.csdn.net/u014286994/article/details/51333118 /* CoreGraphics - CGContext.h */ /** Gra ...
- Visual studio 创建文件时自动添加备注
Visual studio 创建文件时自动添加备注 描述 要求每回添加一个类,普通类或单元测试类文件头自动添加备注, 比如:Copyright, FileName, Author and so on. ...
- require.js vs browserify
require.js vs browserify require.js是模块加载器:browserify是预编译工具 require.js遵循的是AMD规范:browserify遵循的是CommonJ ...
- 两个Java项目之间相互调用
转自:http://dysfzhoulong.iteye.com/blog/1008747 一个项目A另一个项目B:(项目A和项目B都是Java写的项目) 在A项目中怎么调用B项目中的类和方法 有两种 ...
- Python: generator, yield, yield from 详解
1.Generator Expressions 生成器表达式是用小括号表示的简单生成器标记法: generator_expression ::= "(" expression co ...
- python基础16 ----面向对象程序设计二
一.继承与派生 1.继承的定义:继承是一种创建新类的方式,即在类中提取共同的部分创建出一个类,这样的类称为父类,也可称为基类和超类,新建的类称为派生类或子类. 2.单继承:就相当于子类继承了一个父类. ...
- 分布式数据库对比评测(Es,mongodb,redis)基础知识篇
前言 我建议大家看下这个,否则后面你不知道我在说什么. 1.ES数据库相关概念 啥是Es,说白了就是支持文档搜索的分布式数据库,专门方便搜索的,GITHUB京东现在都在用. 1.ES的数据库存放在哪里 ...
- 每天一个Linux命令(19)find命令_初识
Linux下find命令在目录结构中搜索文件,并执行指定的操作. (1)用法: 用法: find pathname -option [-print | -exec | -ok] ...