从锦囊妙计想到的07–cpu和线程定义、开始

前面几个, 我们都先回顾了很多内容才开始讲东西, 我们今天变化一下形式, 先讲个故事在说明事情。

着急的关羽

话说关羽写 完  烙饼的锦囊, 然后就同众兄弟一边喝酒, 一边等 张飞 烙好的 大饼, 等呀等, 这四百张饼, 都两个小时也没烙好。

关羽等等 肚子咕咕叫了,  心想 我这个三弟 是个 急脾气, 这次 干事情怎么这么慢, 关羽实在 等地不耐烦了, 迈步不厨房而来。

关羽同学一边走, 一边 大声说着, 三弟,三弟, 这饼烙的  如何这么时间长呀!

张飞听到了, 哭着脸说,  我就一个人, 两双手,已经忙的 不可开交了, 才烙了100张饼

一个人烙饼--累呀

 

张飞, 馒头大汗, 在工作着, 听了二哥的话, 心里别提多伤心了, 我老张累得 像狗似的, 留了一地汉, 还落了个埋怨!!  大哭起来。

三头六臂的张飞

恰巧, 哪咤巡游人间从此经过, 目睹张飞的处境, 心想我要帮他一下。

哪咤吹了口仙气, 念动咒语, 瞬间其妙的事情发生了。

3头6臂

法术过后, 张飞长出3个脑袋,6条胳膊, 然后另有3套烙饼的工具。

这个时候张飞的  效率就上来了, 现在一个顶 3个, 烙饼的速度大大上升了。

若是 张飞 长出  10头20臂, 效率是否更提高了, 是否一个人  顶10个人用呀。。。。。

大家自己就都知道了。

 问题分析

为什么一个人烙饼就慢, 而三个人烙饼就快,  三头六臂也快??

因为一个人做事情只能一件一件的顺序进行, 没办法同时进行, 这样就慢

三个人做事情, 就可以同时做3件事情, 这3件事情可以相同, 也可以不同, 若是三人同时都烙饼, 自然就快了。

三头六臂 就相当于 3个人因此也效率快, 烙饼速度自然上来了

若是张飞就相当于一个计算机, 那么有三头六臂的 张飞也可以相当于一个计算机了

这样两个计算机的效率自然不同了。  自然有三头六臂的计算机效率高。

计算机如何实现3头6臂的?

计算机里面最重要的 是 中央处理器 (翻译过来: central(中央) processing(处理) unit(单元)   简称:CPU)

中央, 是说明这个东西 在整个计算机里面, 处于核心地位

处理, 就是工作的意思, 就是执行锦囊里面的指令

器(单元), 就是一个东西, 或者一些东西(元器件)组成的一个部件。

一个中央处理器(cpu)就相当一个人, 一个人(cpu)同时仅仅能做一件事情。

三个中央处理器的电脑就相当于3个人, 例如三头六臂的 张飞, 因此能同时 做3件事情。

现在的超级计算机上, 有几十个甚至上百个或者上千个 cpu, 因此他们的能力超级强大。

cpu和线程

一个cpu就相当一个人, 他同时仅仅能做一件事情, 因此, 这些事情是有先后顺序进行的, 因此可以把这些事情用条线串起来, 因此就有了线程(thread, 这个英文就是 线的意思)的概念。

也就是:   一个 cpu(一个人) 同时仅仅能执行一个线程。    当这个线程执行完成, cpu就空闲了, cpu就可以继续别的线程了。

很简单 张飞一次就能烙一张饼,   正在烙的过程中就是 cpu忙(工作中), 烙完了, 人就空闲了, 就可以 进行下一个饼的烙制了。

总结: 一个 cpu可以执行 很多线程,   但是在执行这些线程时, 必须得前一个线程完成了, 在执行下一个(这个有一点小问题, 但是目前先这么理解, 后面学习多了, 在多讲就彻底弄明白这个地方了)线程。

1.  一个cpu可以  在不同时间  执行很多线程

2. 在一个时刻,  一个cpu仅仅能执行一个线程,  当这个线程执行完成后 才能进行下一个线程的执行

3. 多个cpu可以  同时执行多个线程。 例如5个cpu可以同时执行 5个线程, 最多5个(后面在说特殊情况)。

可以看到 cpu 同线程  不是 一一对应的,   因此程序的执行路线  只能叫做线程,而不能是 cpu了!!

换个较多说, 线程就是要被 cpu或者人 执行的东西, 也就是一堆锦囊(里面装着 指令)

线程的创建

线程是否是 一出生就有的?

我们看看, 哪咤, 孙悟空, 二郎神   这些都是 可以3头6臂的。   那么他们平时 是否一直都是三头六臂?   不是, 平时他们就是正常的一头两臂。 需要的时候才摇身一变,变为三头六臂。

程序也一样, 平时也是 一个线程, 需要了, 在创建另外的两个线程。

我们管 程序一启动具有的线程(就是平时的一个线程)叫做 主线程(main thread)(main 主要的, thread 线程,丝线)

当主线程工作后, 可以在主线程里面在创建线程, 然后让线程工作。

电脑会根据cpu的空闲状况 来把这些线程 同cpu关联起来进行执行。

可以看到在电脑里面, 一定有个 专门负责 把线程 同cpu对应的   东西, 这个东西来管理线程, 以及必要的其他工作, 这个东西叫啥, 通俗点, 就是电脑的大管家(其实是  操作系统)。

大管家负责管理cpu 和线程, 以及 程序, 文件, 显示,声音等等。 以后我们会谈到这个大管家的。

线程的基本结构

通俗的 用语言描述可以为下面

线程  名称

线程一些特性,设置等等

。。。。

线程工作内容开始

锦囊x1 (指令)

锦囊x2

.。。

线程工作内容结束

其他线程的东西

线程结束

------------------

我们用相对准确点的符号来表示一下

thread   ttt1  { 
    String name; 
    int max; 
    等等一些 线程的定义工作 
    run (){ 
        锦囊1; 
        锦囊2; 
        。。。。 
        锦囊n; 
    } 
    线程的一些其他定义 
} 

解释如下:
线程定义示意方式
任何一个线程 都要有个名称, 这个名称是区分 不同线程的, 就像 每个人的名字都不同的, 没名字, 没办法 叫的。
任何一个线程 都有个 run 开始的 { ... }, 大括号里面的东西是他的 内容, 就是指令了。

创建和开始线程

线程要先创建然后在开始。

1. 创建线程

通俗的方法是

线程名(其实是线程的类型名称)     线程实例名   =  new  线程名();

这样就创建了一个线程的 实例了。 然后就可以开始这个实例了。

举个例子, 线程类型名称 就像 制作点心的模具,  用这个模具可以制作出  很多很多点心。

在举个例子,  线程类型名  就像  冰棍模具 , 这个冰棍模具可以制作出很多很多 冰棍。

实例名  或者  实例  就是冰棍

线程类型名   就是 模具

----------------------

相对准确点的   描述如下:

T1线程类型       t1  =  new T1线程类型();

具体解释如下:

创建线程

好了, 有了线程的实例(冰棍), 我们就可以开始 冰棍(开始线程的实例, 就是开始线程)

 2. 开始线程

还是上面的例子, 开始那个冰棍

t1.start();

特别注意, 我们这里 是区分大小写的              就是说 T1  和 t1 是不同的

完成一点的例子

 

T1线程类型       t1  =  new T1线程类型();      // 声明并且  创建一个   线程的实例变量

t1.start();     开始这个线程的实例(冰棍)。

到了 这里 电脑的大管家 就该 自动调用(执行)那个  线程的  run { ... } 里面的东西了。

这里是 开始一个 普通的线程

 

主线程是 如何开始的?

主线程的写法

1. 主线程的写法

public class 我的类名 { 
    ...
    ...
    public static void main(String[] args){
        ...
        ...

T1线程类型       t1  =  new T1线程类型();      // 声明并且  创建一个   线程的实例变量

t1.start();     开始这个线程的实例(冰棍)。

        ...
    }
}

2. 主线程的开始

主线程的开始, 是电脑大管家  自动开始的, 同我们无关, 我们没办法控制他!!!

3. 主线程代码解释

main

具体解释参照上图。

 

相关文章

计算机介绍                                  从锦囊妙计想到的01

流程图(分支结构)介绍          从锦囊妙计想到的02

线程介绍                                     从锦囊妙计想到的03

循环结构介绍                             从锦囊妙计想到的05

流程线程总结                             从锦囊妙计想到的06

cpu和线程定义、开始               从锦囊妙计想到的07

分布式计算                                  从锦囊妙计想到的08

分布式中事件和计数                 从锦囊妙计想到的09

内容总结                                     从锦囊妙计想到的10

数据类型,变量简介                从锦囊妙计想到的11

函数和参数                                从锦囊妙计想到的12

用户交互与数据输入输出       从锦囊妙计想到的13

人机交互界面                            从锦囊妙计想到的15 

过程与对象                                从锦囊妙计想到的16

同步和异步                                从锦囊妙计想到的17

顺序打印                                    从锦囊妙计想到的18

数据输入输出                            从锦囊妙计想到的19

屏幕坐标和打印                        从锦囊妙计想到的20

java函数控制输出                     从锦囊妙计想到的21

逐步细化解决复杂问题           从锦囊妙计想到的22

java入门                                    从锦囊妙计想到的23

java复杂过程分析                   从锦囊妙计想到的25

中间辅助功能解决问题          从锦囊妙计想到的26

叠加操作输出复杂图形          从锦囊妙计想到的27

时间和空间                               从锦囊妙计想到的28

编写边测解决问题                  从锦囊妙计想到的29

让程序动起来                          从锦囊妙计想到的30

程序往复运动                           从锦囊妙计想到的31