大型WEB网站架构深入分析线程和多线程Word文档格式.docx

上传人:b****1 文档编号:5316268 上传时间:2023-05-05 格式:DOCX 页数:11 大小:22.38KB
下载 相关 举报
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第1页
第1页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第2页
第2页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第3页
第3页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第4页
第4页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第5页
第5页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第6页
第6页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第7页
第7页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第8页
第8页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第9页
第9页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第10页
第10页 / 共11页
大型WEB网站架构深入分析线程和多线程Word文档格式.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

大型WEB网站架构深入分析线程和多线程Word文档格式.docx

《大型WEB网站架构深入分析线程和多线程Word文档格式.docx》由会员分享,可在线阅读,更多相关《大型WEB网站架构深入分析线程和多线程Word文档格式.docx(11页珍藏版)》请在冰点文库上搜索。

大型WEB网站架构深入分析线程和多线程Word文档格式.docx

1线程

1.1线程的引入

如果说,在操作系统中引入进程都是目的是为了使多个程序能并发执行,以提高资源的利用率和系统吞吐量,那么,在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使计算机操作系统具有更好的并发性。

为了说明这一点,首先回顾进程的两个基本属性:

⑴进程是一个可拥有资源的独立单元。

⑵进程同时又是一个可独立调度和分配的基本单元。

正是由于进程有这两个基本属性,才使之成为一个能独立运行的基本单元,从而也就构成了进程并发执行的基础。

然而,为了使程序能并发执行,系统还必须进行一下一系列操作:

⑴创建进程。

系统在创建一个进程时,必须为它分配其所必需的,除处理机外的所以资源。

如内存空间、I/O设备以及建立相应的PCB⑵撤销进程。

系统在撤销进程时又必须先对其所占用的资源执行回收操作,然后再撤销PCB⑶进程切换。

对进程进行切换时,由于要保留当前进程的PCB环境和设置新选中的进程的CPU环境,须花费不少的处理机时间。

换言之,由于进程是一个资源的拥有者,因而在创建、撤销和切换中,系统必须为之付出较大的时空开销。

也因如此,在系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发进程的进一步提高。

如何能使多个程序更好地并发执行同时又尽量减少系的开销已成为近年来设计操作系统时所追求的重要目标。

有不少演技操作系统的学者们想到,若能将进程的上述两个属性分开,由操作系统分别处理,也就是对于作为调度和分派的基本单位不同时作为拥有资源的单位,以做到“轻装上阵”;

而对于拥有资源的基本单位,又不对之进行频繁的切换。

正是在这种思想的指导下,形成了线程的概念。

1.2线程的基本概念

线程是进程内一个相对独立的、可调度的执行单元。

可以从线程与进程的异同比较中进一步理解线程的概念。

进程是资源分配的基本单位。

所有与该进程有关的资源,例如打印机,输入缓冲队列等,都被记录在进程控制块PCB中。

以表示该进程拥有这些资源或正在使用它们。

另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。

与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。

再者,当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。

1.3线程的性质

根据线程的定义可知线程有以下性质:

⑴线程是进程内的一个相对独立的可执行单元。

⑵线程是操作系统中的基本调度单元,因此线程中应包含有调度所需的必要信息。

⑶由于线程是被调度的基本单元,而进程不是调度的单元,所以每个进程在创建时,至少需要同时为该进程创建一个线程。

也就是说进程中至少要有一个或一个以上线程,否则该进程无法被调度执行。

⑷需要时,线程可以创建其他线程。

⑸进程是被分给并拥有资源的基本单元,同一进程内的多个线程共享该进程的资源。

但线程并不拥有资源,只是使用它们。

⑹由于共享资源,所以线程间需要通信和同步机制。

⑺线程有生命期,有诞生和死亡。

在生命期中有状态的变化。

1.4线程的优点

采用线程机制有些什么好处呢?

对于多线程机制而言,一个进程可以有多个线程,这些线程共享该进程资源,这些线程驻留在相同的地址空间,共享数据和文件。

如果一个线程修改了一个数据项,其他线程可以了解和使用此结果数据。

一个线程打开并读一个文件时,同一进程中国的其他线程也可以同时读此文件。

总而言之,这些线程运行在同一进程的相同的地址空间。

这有以下优点:

⑴首先用于创建和撤销线程的开销比创建和撤销进程的系统开销要少得多。

创建进程时仅需建立线程控制表相应表目,或有关队列。

而在创建进程时要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等,要麻烦费事得多。

撤销时情况也一样。

⑵CPU在线程之间开关时的开销也远比进程之间开关的开销小。

因为开关的线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。

⑶线程机制也增加了通讯的有效性。

如果是在进程之间通讯,往往要求内核的参与,以提供通讯机制和保护机制。

而线程间通讯是在同一进程的地址空间内,共享主存和文件,所以非常简单,无需内核参与。

⑷方便和简化了用户的程序结构工作。

用户在分析和设计程序结构时,考虑如何便于多线程机制实现,客观上促使用户设计出边界清晰、模块独立性好的程序。

1.5线程的适用范围

并不是在所有的计算机系统中线程都是适用的。

事实上在那些很少做进程调度和切换的实时系统、个人数字助理系统中,由于任务的单一性,设置线程相反会占用更多的内存空间和寄存器。

使用线程的最大好处是在有多个任务需要处理机处理时,减少处理机的切换时间;

而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。

由此,可以推出最适合使用线程的系统是多处理机系统。

在多处理机系统中,同一用户程序可以根据不同的功能划分为不同的线程,放在不同的处理机上执行。

在用户程序可以按功能划分为不同的小段时,单处理机系统也可因使用线程而简化程序的结构和提高执行效率。

几种典型的应用是:

(1)服务器中的文件管理或通信控制。

在局域网的文件服务器中,对文件的访问要求可被服务器进程派生出的线程进行处理。

由于服务器同时可能接受许多个文件访问要求,则系统可以同时生成多个线程来进行处理。

如果计算机系统是多处理机的,这些线程还可以安排到不同的处理机上执行。

(2)前后台处理。

许多用户都有过前后台处理经验,即把一个计算量较大的程序或实时性要求不高的程序安排在处理机空闲时执行。

对于同一个进程中的上述程序来说,线程可被用来减少处理机切换时间和提高执行速度。

(3)异步处理。

程序中的两部分如果在执行上没有顺序规定,则这两部分程序可用线程执行。

1.6线程的分类

线程可以分成两种:

一种是设计系统内核的,称为内核线程;

另一种是用户级别的,称为用户线程。

1.6.1内核线程

对于通常的进程,无论是系统进程还是用户进程,进程的创建、撤销以及要求由系统设备完成的I/O操作,都是利用系统调用而进入内核再由内核中相应的处理程序予以完成的。

进程的切换同样是在内核的支持下实现的。

因此说,不论什么进程都是在操作系统内核的支持下运行的,是与内核紧密相连的。

这里所谓的内核支持线程,也都同样是在内核的支持下运行的,即无论是用户进程中的线程,还是系统进程中的线程,它们的创建、撤销和切换等都是依靠内核实现的。

此外,在内核空间还为每一个内核支持线程设置了一个线程控制块,内核根据该控制块而感知某线程的存在,并对其加以控制。

1.6.2用户线程

用户线程仅存在与用户空间中。

对于这种线程的创建、撤销、线程中间的同步于通信等功能都无须利用系统调用来实现。

对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,也同样无须内核的支持。

由于切换的规则远比进程调度和切换的规则简单,因而线程的切换速度特别快。

可见,这种线程是与内核无关的。

可以为一个应用程序建立多个用户进程。

在一个系统中的用户线程数目可以达到数百甚至数千个。

由于这些线程的任务控制块都是设置在用户空间中,而线程所执行的操作也无须内核的帮助,所以内核完全不知道用户级线程的存在。

1.7线程的状态

由于线程是到底和执行的基本单位,因此,和进程一样,线程在它生命过程中有状态变化。

所谓状态是指线程当前在干什么和它能干什么?

实际上状态的划分和设计与系统设计目标和调度方法紧密相关,因此各系统的状态设计部完全相同,但几个关键状态择是共有的。

⑴就绪状态

线程已具备执行条件,等待调度程序分配给一个CPU运行。

⑵运行状态

调度程序选择该线程并分配一个CPU给线程。

运行状态是指线程正在CPU是运行

⑶等待状态(或阻塞状态)

线程正等待某个事件发生。

1.8线程的执行特性

线程在执行时也有它的相关特性。

线程的状态和同步用来反映线程的这些特性。

线程有3个基本状态,即执行、就绪和阻塞。

但是线程没有进程中的挂起状态。

也就是说,线程是一个只与内存和寄存器相关的概念,它的内容不会因交换而进入外存。

针对线程的3种基本状态,存在5种基本操作来转换线程的状态。

这5种基本操作是:

(1)派生(spawn):

线程在进程内派生出来,它即可由进程派生,也可由线程派生。

用户一般用系统调用(或相应的库函数)派生自己的线程。

一个新派生出来的线程具有相应的数据结构指针和变量,这些指针和变量作为寄存器上下文放在相应的寄存器和堆栈中。

新派生线程被放入就绪队列。

(2)阻塞(Block):

如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。

阻塞时,寄存器上下文、程序计数器以及堆栈指针都会得到保证。

(3)激活(unblock):

如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。

(4)调度(schedule):

选择一个就绪线程进入执行状态。

(5)结束(Finish):

如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。

需要注意的一点是,在某些情况下,某个线程被阻塞也可能导致该线程所属的进程被阻塞。

线程的另一个执行特性是同步。

由于同一进程中的所有线程共享该进程的所有资源和地址空间,任何线程对资源的操作都会对其他相关线程带来影响。

因此,系统必须为线程的的执行提供同步控制机制,以防止因线程的执行而破坏其他的数据结构和给其他线程带来不利的影响。

线程中所使用的同步控制机制与进程中所使用的同步控制机制相同。

因此,这里不再进一步讲述有关线程的同步问题。

2多线程技术

线程可以定义为进程中的异步代码路径。

在支持多线程技术的操作系统中,进程可以包含多个线程,这些线程可以按照与多用户操作系统同时支持多进程相同的方式同时运行。

从本质上讲,多线程可以在一个进程内同时运行。

这就是为什么线程有时候被当做是轻量级进程的原因。

2.1多线程的优点

引入多线程设计技术的优点可分为下面四点:

⑴响应能力。

多线程处理一个交互应用程序的时候,当线程的一部分被阻塞的时候,该应用程序还能继续运行,因此对用户增强了响应能力。

⑵资源共享。

线程共享它们所属进程的内存和资源。

共享的好处就是一个应用程序可以有多个拥有相同地址空间的不同线程在运行。

⑶节约。

为进程的创建分配内存和资源是很昂贵的开销,因为线程共享它们所属的进程的资源,所以在创建和上下文转换线程的时候就要节约很多。

要去测量、比较创建以及管理进程和线程之间的花费是很困难的,通常来说,创建和管理一个进程的花费要比之下同意的操作大得多。

⑷多进程结构体系的利用。

多进程结构体系因为可以让进程在不同的进程中并行执行而可以充分发挥多线程的优点。

在一个单线程结构体系中,CPU在不同的线程之间快速转换,让线程看起来好像是并行执行的,但实际上在一个时刻中只有一个线程在执行。

2.2多线程模式

2.2.1单对多模式

单对多模式描述了多个用户级线程对应一个内核线程。

线程管理是在用户空间中完成的。

所以它是高效率的,但是如果有一个线程造成了系统调用的阻塞将导致整个进程的阻塞。

因为只有一个内核可以使用,所以在同一时间内只允许一个线程进入内核。

该模式不能实现多线程在多进程上的并行运行,不支持内核线程的用户级线程类操作系统采用单对多模式。

2.2.2单对单模式

单对单模式描述了每个用户级线程对应一个内核。

这种模式中,当一个阻塞了系统调用时,其他的线程依然可以运行,它支持多线程在多进程上的并行运行。

该模式的唯一缺点是当创建一个用户级线程时必须同时创建相应的内核模式。

因为创建一个内核进程的费用可以让一个应用的负担大大加重而影响其性能,所以大部分这种模式的实现都受限于系统能提供的线程资源数。

2.2.3多对多模式

多对多模式描述了多个用户级线程对应较少或大约相同的内核线程。

对于不同的应用或是不同的机器,内核线程的数量规定可能不同。

尽管在单对多模式中,用户可以随意创建其所需要的用户线程的数量,实际上因为只有一个内核,所以在一个时间内仅允许一个线程的运行;

在单对单模式中,有比较多的资源可以获得,但是开发者在创建线程时必须小心考虑系统的承受能力,在多对多模式中,以上缺点都不具有,开发者随意创建其所需的用户线程的数量,而且相应的内核线程可以在多进程中并发执行。

3Java多线程技术

多线程编程是Java语言的一个重要特色,Java对创建多线程程序提供了广泛的支持,Java的多线程是一个类或程序执行和管理多个线程的能力,每个执行线程可独立执行其他线程或与其他线程同步执行。

Java的多线程机制能够很方便地创建和运行多个独立的线程的程序,并且可以创建多个同步线程,实现多个任务的同步执行,这机制对于实现资源共享、防止“死锁”现象的出现极为有用。

多线程的程序能更好地表达和解决具体问题,是计算机应用开发和程序实现的发展趋势。

3.1线程的生命期与状态转换

线程同进程一样,是一个动态的概念,所以线程同进程一样,也有一个从产生到消亡的生命周期,在其生命周期中,程序可以对线程进行各种控制操作。

一个新建的线程的生命期中有如下5种状态:

(1)新建态(Newborn)

当线程用new运算符创建但还未执行的这段时间里,它处于新建状态中,此时,线程对象已被分配了相应的内存空问并被初始化。

创建线程的语句可以表示如下:

Threaadtl=newThread();

(2)就绪状态或可运行状态(Runnable)

当新建的线程调用start()启动方法后,就会由新建态进入可运行态。

可运行态的线程进入线程队列排队等待CPU资源,随时可以被调度执行。

至于可运行态的线程何时才被真正执行,则取决于线程的优先级和排队队列的当前状况。

使线程对象tl由新建态进入可运行态的语句可以表示如下:

t1.start();

(3)运行态(Running)

当可运行的线程被CPU调度后,就进入运行态,运行态表明线程正在运行,即线程对象正在调用本对象的run()方法。

(4)挂起态(Blocked)

一个正在运行的线程遇到某些特殊情况时,将会进入挂起态。

如果一个线程处于挂起状态,这个线程暂时无法进入排队队列。

(5)消亡态(Dead)

表示线程已退出运行状态,不再具有继续运行的能力。

线程消亡的原因有两种:

一是线程正常运行终止,即调用完Ylln()方法自然消亡:

二是非正常消亡,例如执行了stop()方法或destory()方法。

3.2线程的优先级与调度

Java提供一个线程调度器来监控启动后进入就绪状态的所有线程。

线程调度器根据线程的优先级决定调度线程的先后顺序,优先级高的线程先调度,优先级低的线程后调度。

同时,线程的调度又是抢先式的,如果在当前线程的执行过程中,一个具有更高优先级的线程进入就绪状态,则这个高优先级的线程将立即被调度执行。

线程的优先级的范围是1~10,Thread类用3个常量来表示线程的优先级,分别为:

Thread.MIN—PRIORITY,优先级为1,Thread.MAX—PRIORITY,

优先级为10,Thread.NORM—PRIORITY,即为缺省优先级5,通过setPriority()方法可以改变线程的优先级。

3.2java多线程实现

在Java中,多线程的实现方式有两种:

可以由线程Thread类派生子类,由子类生成的对象来实现多线程;

也可以直接定义一个线程类来实现Runnable接口,由该线程类生成对象来实现多线程。

下面分别介绍两种方法实现多线程的过程。

由Thread娄派生子类

Thread是一个具体的类,它封装了线程的所有行为。

Thread类负责向其他类提供线程的最主要的功能,为了向一个类增加线程功能,可以由Thread类派生一个子类并同时覆盖run()方法。

run()方法是是线程执行的起点,可以通过定义run()方法来为线程提供代码。

实现Runnable接口

实现Runnable接口是在程序中使用线程的另一种方法。

在某些情况下,一个类已经扩展了Frame或Applet,因而这样的类不能再继承Thread类。

Runnable接口为一个类提供了一种无须扩展Thread类就可以执行一个新的线程的方法。

这种创建线程的方更具灵活性,也使用户线程能够具有其他的一些类的特征。

3.2实现多线程避免死锁

由于系统资源有限,程序中的多个程序互相等待对方资源,而在得到对方资源前不会释放自己的资源,造成都想得到资源而又都得不到资源,从而导致线程不能继续执行,这就是死锁问题。

例如,个线程持有对象A,另一个线程持有对象B,第一个线程在持有对象A,但必须拥有第二个线程所持有的对象B才能执行;

同样,第二个线程在持有对

象B,但必须拥有第一个线程所持有的对象A才能执行,这两个线程就会无限期地阻塞,这时,线程的死锁就发生了。

线程的死锁很少发生,但一旦发生就很难调试。

应尽量避免死锁的发生。

为了防止死锁现象的发生,在多线程程序设计

时可遵循如下原则:

(1)尽量少采用多线程来进行程序设计

(2)在对象的同步方法中调用其它的同步方法要小心

(3)在synchronized封装的块中的执行时间尽可能地短,需要长时间运行的任务尽量不要放在synchronized封装的同步块中。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2