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

    一、线程概述
    线程是程序运行的基本执行单元。多线程操作系统一个应用程序对应一个线程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。
    进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存空间。
    线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。
    注意:任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函数。也可以将这个函数看做线程的入口点。如在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方法的。

猜你喜欢

转载自bohaiwaiwai.iteye.com/blog/1856344
今日推荐