从生活中理解什么是多线程
来源:互联网 发布:本土决战武器知乎 编辑:程序博客网 时间:2024/05/16 08:44
每一个程序可以包含至少一个线程,而多个线程之间可以“并发”执行。
在介绍线程前先来用生活中最常见的一个小例子来理解什么是线程:
假如你去一家餐馆吃饭,那家餐馆只有一个服务员,所以这个唯一的服务员给你点菜的时候,别的去餐馆吃饭的人就得等着。但是如果这个餐馆有多个服务员的话,那么在同一时刻就可以给多个去餐馆吃饭的人点菜,这里举A、B两个服务员,分别接待甲、乙两个顾客,而每个顾客点了不同的三道菜。
上面例子中的餐馆可以理解成一个程序,而A、B两个服务员可以理解成两个线程,后厨做菜的厨师可以看做是CPU(假设只有一个CPU)。
从A、B两个服务员同时接待甲、乙两个顾客这个表象来看线程是“同步”、“并发”执行的,但是在厨师做菜的过程中还是有先后之分的,只是厨师会把甲乙两个顾客点的菜分开来做,做完甲的一道菜后立刻开始做乙的一道菜,这样不停地切换着做甲乙两个顾客点的菜。而在甲乙顾客看来他们桌上都有着菜吃,误以为他们的菜是同时做出来的。
而计算机里的多线程也是如此,cpu会分配给每一个线程只有极少的运行时间,时间一到就交出运行权,所有线程被快速的切换执行,因为cpu的执行速度非常的快,所以在执行的过程中我们可以简单的认为这些线程是“并发”执行的。
上面厨师做菜的原则是:不同的切换顾客们点的菜。假设厨师做菜的原则变了,是单顾客原则:给一位顾客做完所有的菜后再给别的顾客做菜,就是说先一下子把甲点的三道菜全做出来后再去做乙点的那三道菜,这样的话如果厨师在做甲的某一道菜时发现甲点的那道菜的原料没有了,那么乙的菜就得一直等着。
如果是在计算机中,单顾客原则执行线程的话,当一个恶性的线程运行不下去时,计算机就会出现死机的现象,这时候只能重启。
上面介绍的厨师做菜的两种原则分别代表着计算机中线程的两种调度形式:抢占式调度和非抢占式调度。应用中我们一般用抢占式调度(即厨师的第一种做菜原则)。
上面就是我对多线程在实际生活中的理解,希望能给刚刚接触多线程的朋友一些帮助,这个比喻如果有不妥或者不到位之处还请留言指出。
同步请求是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步请求是指:发送方发出数据后,不等接收方发回响应,继续接着发送下一个数据包的通讯方式。
- 从生活中理解什么是多线程
- 从生活中理解什么是多线程
- 多线程(1)——从生活中理解什么是多线程
- 多线程(1)——从生活中理解什么是多线程
- 多线程(1)——从生活中理解什么是多线程
- 多线程(1)——从生活中理解什么是多线程
- 从生活中理解SOA、WebServeice
- 什么是生活
- 什么是生活
- 从信号的维度再次理解香农公式,进而发问,人类到底生活在几维空间中?
- 从生活中细节看产品设计
- 从生活中开悟的知识
- java异常从生活中来!
- 如何从生活中领悟设计模式
- 多线程中join的理解
- 多线程中ThreadLocal的理解
- java 多线程实例,自己写的第一个例子,理解什么是多线程,怎么写多线程
- 什么是多线程?
- 如何有效申请TI的免费样片
- Floyd-Warshall
- 网络动画
- 各种音频编码方式的对比
- Java日志终极指南
- 从生活中理解什么是多线程
- tomcat设置https,且http自动跳转为https访问
- codeforces Round #380 Div.2
- 小码哥-React-Native初体验一(window环境下开发)
- Android 绘图基础
- 123
- 浅析 Linux 初始化 init 系统: Systemd(2)
- JAVA爬虫初识之httpclient与jsoup
- CentOS服务器安装内容