`

进程与线程的详述--区别;多线程概述,线程建立方式

阅读更多
    一、线程概述
    线程是程序运行的基本执行单元。多线程操作系统一个应用程序对应一个线程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。
    进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存空间。
    线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。
    注意:任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函数。也可以将这个函数看做线程的入口点。如在Windows中用于建立线程的API函数CreateThread的第三个参数就是这个执行函数的指针。
    在操作系统将进程分成多个线程后,这些线程可以在操作系统的管理下并发执行,从而大大提高了程序的运行效率。虽然线程的执行从宏观上看是多个线程同时执行,但实际上这是操作系统在进行线程调度(操作系统为了能提高程序的运行效率,在一个线程空闲时会撤下这个线程,并且会让其他的线程来执行,这种方式叫做线程调度。),由于调度时间非常短非常频繁,所以感觉就像在并发执行。
    二、线程给我们带来的好处
    如果能合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能。
    1. 充分利用CPU资源
    2. 简化编程模型
    如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。但要完成多项任务,如果还使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。如显示一个时钟的时、分、秒三个指针。使用单线程就得在循环中逐一判断这三个指针的转动时间和角度。如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。这样有助于开发人员对程序的理解和维护。
    3. 简化异步事件的处理
    4. 使GUI更有效率
    5. 节约成本
    提高程序的执行效率一般有三种方法:
    (1)增加计算机的CPU个数。容易做到,昂贵。
    (2)为一个程序启动多个进程。实惠,但是不容易共享数据且消耗大量的系统资源。
    (3)在程序中使用多进程。弥补了第一种方法的缺点,而又继承了它们的优点。(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多)因此,使用多线程是提高程序执行效率的最廉价的方式。
   三、Java的线程模型
     Java的线程模型面向对象的。Thread类的run方法是线程执行函数(线程的任务或者工作),还有一个start方法,这个方法负责建立线程(启动)。任何继承Thread的Java类都可以通过Thread类的start方法来建立线程。如果想运行自己的线程执行函数,那就要覆盖Thread类的run方法。还有一个接口Runnable,这个接口只有一个抽象方法run,也就是Java线程模型的线程执行函数。实际上Thread也是继承Runnalbe接口
   Java中建立线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口,并通过Thread和实现Runnable的类来建立线程,其实这两种方法从本质上说是一种方法,即都是通过Thread类来建立线程,并运行run方法的。
分享到:
评论

相关推荐

    Linux多线程编程手册

    Linux多线程编程手册,详述了Solaris 线程 API 和 pthread API

    基于VC++6.0MFC的多线程通信技术研究

    本论文以陕西省自然科学基金项目(2001年度)—软件逆向工程技术研究为背景,提出了一种软件再设计(redesign)方法,它以面向对象的分析和设计为指导,详述了Windows编程的一个应用领域:多线程通信技术。基于微软基础...

    基于Python的一个获取知乎用户主页信息的多线程爬虫程序源码.zip

    基于Python的一个获取知乎用户主页信息的多线程爬虫程序源码.zip 一个获取知乎用户主页信息的多线程Python爬虫程序。 简介: * 使用[Requests](http://www.python-requests.org/en/master/)模拟HTTP请求/响应,...

    网络编程实用教程(第三版).zip

    7.2 Win32操作系统下的多进程多线程机制 189 7.2.1 Win32 OS是单用户多任务的操作系统 189 7.2.2 Win32 OS是支持多线程的操作系统 190 7.2.3 多线程机制在网络编程中的应用 191 7.3 VC++对多线程网络编程的...

    【RT-Thread作品秀】基于RT-Thread的星务平台研究-电路方案

    本作品设计的线程只有星务线程,采集线程,姿控线程,地测线程,Free线程,正常的卫星软件不止这五个线程,简化为这五个,涉及到的外设也简化为只有定时器与异步串口。 开发环境硬件:ART-Pi开发板 RT-Thread版本:RT-...

    游戏编程--大师技巧

     多任务和多线程  按照Microsoft方式编程:匈牙利符号表示法  世界上最简单的Windows程序  真实的Windows应用程序  Windows类  注册Windows类  创建窗口  事件处理程序  主事件循环  产生一个实时事件循环...

    Eclipse开发入门与项目实践 源代码

    案例7-4 在SWT/JFace中实现多线程效果 265 第8章 Eclipse中插件开发 273 8.1 Eclipse插件开发简介 273 案例8-1 Eclipse中插件开发初体验 274 8.2 Eclipse插件开发基本过程 277 案例8-2 Eclipse中插件...

    CUDA并行程序设计 GPU编程指南

    第5章介绍与CUDA编程紧密相关的核心概念——网格、线程块与线程,并通过示例说明线程模型与性能的关系。第6章借助实例详细讲解了不同类型内存的工作机制,并指出实践中容易出现的误区。第7章细述多任务的CPU和GPU...

    net学习笔记及其他代码应用

    25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. [Page] 26.根据委托(delegate)的知识,请完成以下用户...

    asp.net面试题

    答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子. 13.什么是code-Behind技术。 答:代码分离,这是个明智的东西,像ASP这样混成一...

    CUDA并行程序设计:GPU编程指南

    第5章介绍与CUDA编程紧密相关的核心概念——网格、线程块与线程,并通过示例说明线程模型与性能的关系。第6章借助实例详细讲解了不同类型内存的工作机制,并指出实践中容易出现的误区。第7章细述多任务的CPU和GPU...

    《Visual C# 2008大学教程 第3版》.(刘文红).[PDF]&ckook.pdf

    本书是一本C#编程方面的优秀教材,全面介绍了C#编程的原理和方法,涉及类与对象、控制语句、方法、数组、继承、多态、异常处理、GUI、多线程、多媒体、XML、数据库与SQL、ASP.NET、Web服务、网络、查找与排序、数据...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    10.11.2 查询表达式详述 433 10.11.3 用表达式过滤 434 10.11.4 联接 434 10.11.5 数据项的组合 435 10.12 存储过程 437 10.13 更新数据库 438 10.14 小结 440 第11章 使用entity framework访问数据 ...

    非常优秀的棋牌类游戏源码,包含AI及机器人的难度调节算法

    1,本产品基于.Net使用C#开发,... 8,更多的功能不在这里一一详述,欢迎下载试用,以下同时提供部分源码下载有购买意向者请联系:MSN:zhe8210@hotmail.comQQ:34559851tel:0551-3625951 3195951 手机:13866790013 非诚勿扰

    正则表达式

    对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a...

    基于余水位的潮位实时推算系统 (2011年)

    系统采用多线程、串口通信等技术,与GPS接收机、潮位遥报仪、电脑主机等硬件进行实时通讯,获取定位信息和遥报潮位等数据,利用差分潮位推算施工船舶所在位置处的高精度潮位,并同步将推算潮位传输给作业船舶指导...

    PL/SQL Developer8.04官网程序_keygen_汉化

    而且,该多线程IDE还意味着出现编程错误时不会中止:您在任何时间都可以中断执行或保存您的工作。 易于安装  不同于SQL*Net,无需中间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用...

    PLSQLDeveloper下载

    多线程IDE——PL/SQL Developer是一个多线程IDE。这样,当SQL查询、PL/SQL程序、调试会话等正在运行时,您依然可以继续工作。而且,该多线程IDE还意味着出现编程错误时不会中止:您在任何时间都可以中断执行或保存...

    PHP多个版本的分析解释

    PHP版本主要分三支:PHP4/PHP5/PHP6其中,PHP4由于太古老、对OO支持不力已基本被淘汰,就不在详述。而PHP6由于基本没有生产线上的应用,还基本只是一款概念产品,所以也不详述。 PHP5的版本主要分三支:PHP5.2之前的...

Global site tag (gtag.js) - Google Analytics