`
emowuyi
  • 浏览: 1482690 次
文章分类
社区版块
存档分类
最新评论

多线程(1)——从生活中理解什么是多线程

 
阅读更多
每一个程序可以包含至少一个线程,而多个线程之间可以“并发”执行。

在介绍线程前先来用生活中最常见的一个小例子来理解什么是线程:

假如你去一家餐馆吃饭,那家餐馆只有一个服务员,所以这个唯一的服务员给你点菜的时候,别的去餐馆吃饭的人就得等着。但是如果这个餐馆有多个服务员的话,那么在同一时刻就可以给多个去餐馆吃饭的人点菜,这里举A、B两个服务员,分别接待甲、乙两个顾客,而每个顾客点了不同的三道菜。

上面例子中的餐馆可以理解成一个程序,而A、B两个服务员可以理解成两个线程,后厨做菜的厨师可以看做是CPU(假设只有一个CPU)。

从A、B两个服务员同时接待甲、乙两个顾客这个表象来看线程是“同步”、“并发”执行的,但是在厨师做菜的过程中还是有先后之分的,只是厨师会把甲乙两个顾客点的菜分开来做,做完甲的一道菜后立刻开始做乙的一道菜,这样不停地切换着做甲乙两个顾客点的菜。而在甲乙顾客看来他们桌上都有着菜吃,误以为他们的菜是同时做出来的。

而计算机里的多线程也是如此,cpu会分配给每一个线程只有极少的运行时间,时间一到就交出运行权,所有线程被快速的切换执行,因为cpu的执行速度非常的快,所以在执行的过程中我们可以简单的认为这些线程是“并发”执行的。

上面厨师做菜的原则是:不同的切换顾客们点的菜。假设厨师做菜的原则变了,是单顾客原则:给一位顾客做完所有的菜后再给别的顾客做菜,就是说先一下子把甲点的三道菜全做出来后再去做乙点的那三道菜,这样的话如果厨师在做甲的某一道菜时发现甲点的那道菜的原料没有了,那么乙的菜就得一直等着。

如果是在计算机中,单顾客原则执行线程的话,当一个恶性的线程运行不下去时,计算机就会出现死机的现象,这时候只能重启。

上面介绍的厨师做菜的两种原则分别代表着计算机中线程的两种调度形式:抢占式调度和非抢占式调度。应用中我们一般用抢占式调度(即厨师的第一种做菜原则)。

上面就是我对多线程在实际生活中的理解,希望能给刚刚接触多线程的朋友一些帮助,这个比喻如果有不妥或者不到位之处还请留言指出。

分享到:
评论

相关推荐

    VC多线程——最好理解的讲义

    VC中多线程使用比较广泛而且实用,在网上看到的教程.感觉写的挺好. 一、问题的提出 二、多线程概述 三、Win32 API对多线程编程的支持 四、Win32 API多线程编程例程 五、MFC对多线程编程的支持 六、MFC多线程编程实例 ...

    java多线程设计模式详解(PDF及源码)

    单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 ...

    Java多线程的小例子——吃包子

    一个小例子,有助于理解多线程的知识,一开始厨师做包子,够一百个则换顾客来吃,顾客吃光了再请厨师来做……简明易懂

    多线程操作实例源码,,

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    多线程操作实例源码

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    VC多线程—最好理解的讲义

    VC多线程——最好理解的讲义(来自网络) 包含:单线程、多线程生成方法,使用方法。 实例请查看本人的另外资源。

    Android多线程高级使用PPT

    Android系列课程第二季:多线程使用方法和高级技巧——深入理解 快速掌握Android开发技术、快速提高,全面掌握Android技术体系,同时对Android中常用的技术以及重点难点能够深入理解、熟练运用。

    多线程

    1) 由于第一个线程和第二个线程的功能相同,因此只需要定义2个线程——字母打印线程、数字打印线程; 2) 编译并运行该Java程序,线程的运行结果是否有规律可循? 2. 按照要求编写第2题中的代码,并将其编译、运行。...

    VC多线程实例

    依据“VC多线程——最好理解的讲义 本人亲测,并提供下载的10个例子源码。

    Java进阶学习——Java多线程知识的理解

    Java多线程知识的理解0.前言1.从一道题目引入2.创建线程2.1.继承Thread类2.2.实现Runnable接口3.线程的生命周期4.线程安全4.1.为什么需要线程安全?4.2.如何实现线程安全?5.线程池5.1.为什么需要线程池?5.2.创建...

    操作形同实验——进程同步和互斥

    操作形同实验——进程同步和互斥 (1) 通过编写程序实现进程同步和...(2) 了解Windows2000/XP中多线程的并发执行机制,线程间的同步和互斥。 (3) 学习使用Windows2000/XP中基本的同步对象,掌握相应的API函数。

    多线程文章目录

    以下文章基本上保证真实可信,如...Java多线程②——多线程知识梳理 有助于了解线程池相关的知识、包括线程池执行逻辑、常用方法; 以及java为我们提供常用的线程池和任务调度ScheduledExecutorService以及工作窃取For

    Java实现的多线程与线程安全实践-基于Http协议的断点续传,可用作毕业设计,课程设计

    毕业论文——包含了一篇探讨多线程与线程安全实践项目背景、技术原理和实现过程的学术论文,可作为论文撰写参考。通过阅读论文,学习者可以了解项目的理论基础,深入理解项目的实现细节,提升分析和解决问题的能力。...

    操作系统——Linux信号量机制

    在Linux环境下实现一个多线程对临界资源的互斥操作,利用信号量实现对临界资源的保护,支持Linux下文件输入输出,提高对Linux环境下多进程、多线程、信号量机制和文件操作等知识的理解。 设有进程A、B、C,分别调用...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表...,共包含562个C#编程中常用的属性、方法、类和各种技术...

    易语言真正的线程池简易实现

    易语言简易线程池的实现。...线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级

    【后端】 java基础(5.8)java高级基础之线程——synchronized关键字

    java基础(5.8)java高级基础之线程——synchronized关键字 本章主要讲线程,至于带上进程的原因是为了方便大家对进程和线程有个概念(咳,主要原因是鄙人也不太会进程~)。 首先简单说下我个人对进程和线程的理解。...

    Windows是一个多任务的系统

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

Global site tag (gtag.js) - Google Analytics