开始线程(Thread)之旅,作为程序员,打交道更多的是线程,各种多线程程序,并行编程都是以线程为基础进行的。本文主要内容:

  1. What and Why Thread
  2. 进程和线程的对比

一、What and Why Thread

1.1 What

线程是进程内部的执行单元,进程作为运行程序的实例用于把资源整个在一起,线程属于进程,线程作为在CPU上执行的实体而存在,CPU上运行的是线程,之前的文章说一个CPU在同一时间只能运行一个进程,这是个比较general的说法,准确的说法应该是一个CPU在同一时间只能运行一个进程的一个线程。

每一个进程拥有自己的独立地址空间,但是一个进程内的所有线程都共享所属进程的地址空间(当然包含数据)。

1.2 Why

先引入一个例子,一个Word进程,拥有三个线程(实际好像有30几个)。其中一个负责接受键盘的输入,一个负责自动保存,一个负责调整格式(比如删除一大段文字后Word的格式要马上调整过来)。

这个三个线程因为属于同一个Word进程,共享所有资源,即同一个Word文档,因为CPU真正运行的是线程,这三个线程可以实现并行,对于用户来说,对于Word操作的这三个操作好像也是同时进行的。从系统使用者的角度来说,针对同一个资源(进程)的操作也变成了并行(在单核状态下实际是伪并行,假象)。

因为有多个线程存在,在Word处理的时候,虽然系统一直在自动调整格式,在自动保存,但是用户的输入却从来感觉不到delay。

  1. 多核情况下,多个线程各自有CPU,绝对不会Delay
  2. 单核或者核数小羽线程数时,CPU会不停调度,给各个线程间隔分配资源,用户也不会感觉到明显的delay。

上面的这个例子是无法用进程实现的,假设将上面的三个线程换成三个进程,每个进程只有一个线程去做相应的事情,会出现什么情况呢?

  1. 三个进程会是三个Word文档
  2. 第一进程的线程执行Auto-Save,无法体现到用户真正编辑的文档上
  3. 第二个进程的线程执行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 &&进程和线程的对比的更多相关文章

  1. 如何定位“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)"博 ...

  2. 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 ...

  3. Modern Operating System

    No one can do all things, learn to be good at use what others already did. Most computers have two m ...

  4. Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别

    一. java中实现线程的方式有Thread和Runnable Thread: public class Thread1 extends Thread{ @Override public void r ...

  5. 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 ...

  6. 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 ...

  7. 严重: 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 ...

  8. Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  9. Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

随机推荐

  1. 前端开发中js变量定义及命名的规范建议

    关于变量定义及命名 现在谈谈关于变量及方法等的命名,没有硬性规定,但为了规范,遵循一些约定还是很有必要的. 变量定义:好的做法是把将要使用的变量名用一个var关键字一并定义在代码开头,变量名间用逗号隔 ...

  2. Intellij IDEA打开多项目窗口

    我版本是2016.02.04 其他版本可能不一样的设置

  3. 【网络与系统安全】20179209 wireshark和nmap实验

    TCP三次握手包 在进行实验前,先梳理一遍TCP三次握手的过程,这个图是我本科学网络时画过不少于十遍的图,我觉得非常有纪念意义. 稍作解释,第一次握手,客户端发起请求连接,发送一个标志位为SYN的ip ...

  4. 洛谷 2233 [HNOI2002]公交车路线

    题目戳这里 一句话题意 一个大小为8的环,求从1到5正好n步的方案数(途中不能经过5). Solution 巨说这个题目很水 应该是比较容易的DP,直接从把左边和右边的方案数加起来即可,但是有几个需要 ...

  5. PAT 组合数的和(15)

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...

  6. Hadoop初体验(续)--YARN

    1.Hadoop已经安装完成并启动成功 复制mapred-site.xml.template重命名为mapred-site.xml /etc/hadoop/mapred-site.xml.templa ...

  7. xcode6

    官方的xcode6下载太慢,这里送上百度网盘地址: http://pan.baidu.com/s/1hqze1hi

  8. java线程 同步临界区:thinking in java4 21.3.5

    java线程 同步临界区:thinking in java4 21.3.5 thinking in java 4免费下载:http://download.csdn.net/detail/liangru ...

  9. host更新

    http://alsohosts.herokuapp.com/ google镜像站https://goge.ml/

  10. 2.5链表 链式A+B

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAowAAAGpCAIAAACI2PCZAAAgAElEQVR4nO2d3YsdSX6m++/wXf8Fxu ...