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 ...
随机推荐
- 九度OJ 1347:孤岛连通工程 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1522 解决:314 题目描述: 现在有孤岛n个,孤岛从1开始标序一直到n,有道路m条(道路是双向的,如果有多条道路连通岛屿i,j则选择最短 ...
- 加密php源代码
<?php function RandAbc($length = "") { //返回随机字符串 $str = "ABCDEFGHIJKLMNOPQRSTUVWXY ...
- SNMP 监控方式的配置
由于某些设备并不能安装 Agent,或者不方便安装 Agent 等因素,将采用 SNMP 方式进行监控 1.Linux 配置 SNMP [root@crazy-acong ~]# yum -y ins ...
- SocketAsyncEventArgs里的AcceptSocket能独立存在吗?
独立存在是什么意思? 先来看一个例子.我们知道一个Socket对象(我们叫他ListenScoket)可以调用AcceptAsync并接受一个SocketAsyncEventArgs对象,如果操作成功 ...
- [ACM] FZU 2087 统计数边 (有多少边至少存在一个最小生成树里面)
Problem Description 在图论中,树:随意两个顶点间有且仅仅有一条路径的图. 生成树:包括了图中全部顶点的一种树. 最小生成树:对于连通的带权图(连通网)G,其生成树也是带权的. 生成 ...
- java面向对象入门之方法参数的传递
/* Name : Power by :Stuart Date:2015.4.25 */ class PassOn{ //创建show方法,把i传入,输出i+1的结果 public void show ...
- Python字典的入门案例
查看python版本: [root@localhost ~]# python -V Python 2.7.5 1.基本的字典操作 案例1:简单电话本实现 [root@localhost ~]# vim ...
- float元素的父元素自适应高度
当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种. 1.对父元素设置固定高度 2.使用clear清除浮动 3. ...
- poj 3278 Catch That Cow-搜索进阶-暑假集训
Catch That Cow Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- keeplive使用
一.简介 Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层.第4层和第7层交换机的功能.主要提供loadbalancing( ...