操作系统原理:CH05_Thread

上传人:努力****83 文档编号:189392863 上传时间:2023-02-22 格式:PPT 页数:71 大小:1.43MB
收藏 版权申诉 举报 下载
操作系统原理:CH05_Thread_第1页
第1页 / 共71页
操作系统原理:CH05_Thread_第2页
第2页 / 共71页
操作系统原理:CH05_Thread_第3页
第3页 / 共71页
资源描述:

《操作系统原理:CH05_Thread》由会员分享,可在线阅读,更多相关《操作系统原理:CH05_Thread(71页珍藏版)》请在装配图网上搜索。

1、Module 5:Threads线程线程nOverview 综述综述nBenefits 益处益处nUser and Kernel Threads 用户和内核线程用户和内核线程nMultithreading Models 多线程模型多线程模型nSolaris 2 Threads Solaris 2线程线程nJava Threads Java线程线程线程的引入线程的引入进程具有二个基本属性:进程具有二个基本属性:是一个是一个拥有资源的独立单位拥有资源的独立单位:它可独立分配虚地址空间、主存和其它它可独立分配虚地址空间、主存和其它又是一个又是一个可独立调度和分派的基本单位可独立调度和分派的基本单位。

2、这二个基本属性使进程成为并发执行的基本单位这二个基本属性使进程成为并发执行的基本单位 在一些早期的在一些早期的OS中,比如大多数中,比如大多数UNIX系统、系统、Linux等,进程同时具等,进程同时具有这二个属性。有这二个属性。由于进程是一个资源的拥有者,因而在进程创建、撤销、调度切换由于进程是一个资源的拥有者,因而在进程创建、撤销、调度切换时,系统需要付出较大的时空开销。时,系统需要付出较大的时空开销。进程的数目不宜过多,进程切换频率不宜过高,限制了并发程度。进程的数目不宜过多,进程切换频率不宜过高,限制了并发程度。n操作系统的设计目标操作系统的设计目标n提高并发度提高并发度n减小系统开销减

3、小系统开销n将进程的两个基本属性分开,对于拥有资源的基本单位,不将进程的两个基本属性分开,对于拥有资源的基本单位,不对其进行频繁切换,对于调度的基本单位,不作为拥有资源对其进行频繁切换,对于调度的基本单位,不作为拥有资源的单位,的单位,“轻装上阵轻装上阵”引入线程的目的是简化线程间的通信,以小的开销来提高进程内的并发程度。n在某些情况下,一个应用程序可能需要执行多个相似任务。在某些情况下,一个应用程序可能需要执行多个相似任务。n如网页服务器,可能有多个客户端并发访问如网页服务器,可能有多个客户端并发访问n如果网页服务器作为传统进程来执行,那么一次只能对一个客户服如果网页服务器作为传统进程来执行

4、,那么一次只能对一个客户服务,客户的等待时间会很长务,客户的等待时间会很长n解决方案解决方案1n创建多个进程创建多个进程n网页服务器作为单个进程运行只接收请求网页服务器作为单个进程运行只接收请求n当接收到请求后,该进程创建另一个进程以处理请求当接收到请求后,该进程创建另一个进程以处理请求n解决方案解决方案2n引入线程,多线程的进程引入线程,多线程的进程n进程中的一个线程监听客户请求进程中的一个线程监听客户请求n当有请求时,该进程创建一个线程以处理请求当有请求时,该进程创建一个线程以处理请求Threads线程线程nMany software packages that run on modern

5、 desktop PCs are multi-threaded.n例如:一个字处理程序例如:一个字处理程序(如如word)可能同时有一个线程接收用户输入,另可能同时有一个线程接收用户输入,另外一个线程显示图形,还有一个线程执行拼写检查。外一个线程显示图形,还有一个线程执行拼写检查。n又例如:一个应用程序要完成几个类似的任务,则可以创建几个线程来完又例如:一个应用程序要完成几个类似的任务,则可以创建几个线程来完成。比如一个成。比如一个web server,可以为每个用户的请求创建一个服务线程。,可以为每个用户的请求创建一个服务线程。线程的引入线程的引入n进程:进程:资源分配单位(存储器、文件)和

6、资源分配单位(存储器、文件)和CPU调度(分派)单位。又调度(分派)单位。又称为称为任务任务(task)n线程:线程:作为作为CPU调度单位,而进程只作为其他资源分配单位。调度单位,而进程只作为其他资源分配单位。n只拥有必不可少的资源,如:线程状态、程序计数器、寄存器上只拥有必不可少的资源,如:线程状态、程序计数器、寄存器上下文和栈下文和栈n同样具有就绪、阻塞和执行三种基本状态同样具有就绪、阻塞和执行三种基本状态n与同属一个进程的其它线程共享进程拥有的全部资源与同属一个进程的其它线程共享进程拥有的全部资源n线程的优点:线程的优点:减小并发执行的时间和空间开销(线程的创建、退出和减小并发执行的时

7、间和空间开销(线程的创建、退出和调度),因此容许在系统中建立更多的线程来提高并发程度。调度),因此容许在系统中建立更多的线程来提高并发程度。n线程的创建时间比进程短;线程的创建时间比进程短;n线程的终止时间比进程短;线程的终止时间比进程短;n同进程内的线程切换时间比进程短;同进程内的线程切换时间比进程短;n由于同进程内线程间共享内存和文件资源,可直接进行不通过内由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信;核的通信;Threads线程线程nA thread(or lightweight process)is a basic unit of CPU utilization;i

8、t consists of:线程(轻型进程)是线程(轻型进程)是CPU运用的一个基本单元,包括运用的一个基本单元,包括nprogram counter 程序计数器程序计数器nregister set 寄存器集寄存器集nstack space 栈空间栈空间nA thread shares with its peer threads its:一个线程与它的对等线程共享:一个线程与它的对等线程共享:ncode section 代码段代码段ndata section 数据段数据段noperating-system resources 操作系统资源操作系统资源 such as open files an

9、d signalscollectively know as a task.总体作为一个任务总体作为一个任务nA traditional or heavyweight process is equal to a task with one thread 传统的或重型进程等价于只有一个线程的任务传统的或重型进程等价于只有一个线程的任务Single and Multithreaded Processes进程和线程的比较进程和线程的比较n并发性:并发性:在引入线程的在引入线程的OS中,不仅进程之间可以并发中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执执行,而且在一个进程中的多个

10、线程之间亦可并发执行,因而使行,因而使OS具有更好的并发性,从而能更有效地使具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量。用系统资源和提高系统吞吐量。n拥有资源:拥有资源:进程是拥有资源的独立单位进程是拥有资源的独立单位n系统开销:系统开销:在创建或撤消进程时,系统都要为之分配在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、或回收资源,如内存空间、I/O设备等。因此,设备等。因此,OS所所付出的开销将明显地大于在创建或撤消线程时的开销。付出的开销将明显地大于在创建或撤消线程时的开销。进程和线程的比较进程和线程的比较n地址空间和其他资源地址空间和其他资源(如打开文件)

11、:进程间相(如打开文件):进程间相互独立,同一进程的各线程间共享某进程内互独立,同一进程的各线程间共享某进程内的线程在其他进程不可见的线程在其他进程不可见n通信通信:进程间通信:进程间通信IPC,线程间可以直接读写进程线程间可以直接读写进程数据段(如全局变量)来进行通信需要进程数据段(如全局变量)来进行通信需要进程同步和互斥手段的辅助,以保证数据的一致性同步和互斥手段的辅助,以保证数据的一致性n调度调度:线程上下文切换比进程上下文切换要快得:线程上下文切换比进程上下文切换要快得多;多;ThreadControlBlockUserStackUserStackKernelStackKernelSt

12、ackUserAddressSpaceUserAddressSpaceProcessControlBlockProcessControlBlockThreadSingle-ThreadedProcess ModelMultithreadedProcess ModelThreadControlBlockUserStackKernelStackThreadThreadControlBlockUserStackKernelStackThread线程切换和进程切换Multiple Threads within a Task一个任务中的多线程一个任务中的多线程nResponsiveness 响应度高:一

13、个多线程的应用在执行中,即使其中的某个线程阻塞,其他的线程还可继续执行,从而提高响应速度nResource Sharing 资源共享:同一进程的多个线程共享该进程的内存等资源nEconomy经济性:创建和切换线程的开销要低于进程。比如,Solaris中进程创建时间是线程创建的30倍,进程切换时间是线程切换的5倍。nUtilization of MP Architectures MP体系结构的运用:多线程更适用于多处理机结构。Benefits益处益处Threads线程线程(Cont.)nIn a multiple threaded task,while one server thread is

14、blocked and waiting,a second thread in the same task can run.在一个多线程任务中,当一个服务器线程被阻塞后,在同一个任务中的第2个线程可运行nCooperation of multiple threads in same job confers higher throughout and improved performance.同一作业中多线程协同导致高吞吐量并改善性能nApplications that require sharing a common buffer(i.e.,producer-consumer)benefit f

15、rom thread utilization.应用程序需要共享一个公用的缓冲(即生产者-消费者),从线程运用中得利nThreads provide a mechanism that allows sequential processes to make blocking system calls while also achieving parallelism.线程提供了一种机制,允许序列进程阻塞系统调用同时还能实现并行Threads线程线程nKernel-supported threads内核支持的线程(Mach and OS/2).nUser-level threads;supported

16、 above the kernel,via a set of library calls at the user level(Project Andrew from CMU).用户级线程;在内核之上,通过用户级的库调用nHybrid approach implements both user-level and kernel-supported threads(Solaris 2).混合处理实现用户级和内核支持线程User Threads用户线程用户线程nThread Management Done by User-Level Threads Library由用户级线程库进行管理的线程由用户级

17、线程库进行管理的线程n线程库提供对线程创建线程库提供对线程创建调度和管理的支持,无需内核支持。调度和管理的支持,无需内核支持。nProcess is still unit of CPU scheduling from OS kernel perspectivenExamples例子例子-POSIX Pthreads-Mach C-threads-Solaris threads用户线程用户线程(user-level thread)n用户线程的维护由应用进程完成;用户线程的维护由应用进程完成;n内核不了解用户线程的存在;内核不了解用户线程的存在;n用户线程切换不需要内核特权;用户线程切换不需要内核

18、特权;n用户线程调度算法可针对应用优化;用户线程调度算法可针对应用优化;nDRAWBACKS:如果内核是单线程的如果内核是单线程的,那么一个用户线程发起系统调用而阻塞,则整个那么一个用户线程发起系统调用而阻塞,则整个进程阻塞。时间片分配给进程,多线程则每个线程就慢。进程阻塞。时间片分配给进程,多线程则每个线程就慢。不依赖于不依赖于OS核心,应用进程利用线程库提供创建、同步、核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统调度和管理线程的函数来控制用户线程。如:数据库系统informix,图形处理图形处理Aldus PageMaker。调度由应用软件内部

19、调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态进行,通常采用非抢先式和更简单的规则,也无需用户态/核心核心态切换,所以速度特别快。态切换,所以速度特别快。Kernel Threads内核线程内核线程nSupported by the Kernel由内核支持,由内核支持,在内核空间执行线程创建、调度和管理在内核空间执行线程创建、调度和管理nThread is unit of CPU schedulingnExamples例子例子-Windows XP/2000-Solaris-Digital UNIXn内核维护进程和线程的上下文信息;内核维护进程和线程的上下文信息;n线程切

20、换由内核完成;线程切换由内核完成;n一个线程发起系统调用而阻塞,不会影响其他线程的运行。一个线程发起系统调用而阻塞,不会影响其他线程的运行。n时间片分配给线程,所以多线程的进程获得更多时间片分配给线程,所以多线程的进程获得更多CPU时间。时间。依赖于依赖于OS核心核心,由内核的内部需求进行创建和撤销,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。用来执行一个指定的函数。Windows NT和和OS/2支持内核线支持内核线程;程;内核线程内核线程(kernel-level thread)用户线程与内核线程用户线程与内核线程n调度方式调度方式:内核线程的调度和切换与进程的调度和切换十分相

21、似,内核线程的调度和切换与进程的调度和切换十分相似,用户线程的调度不需用户线程的调度不需OS的支持。的支持。n调度单位调度单位:用户线程的调度以进程为单位进行,在采用时间片轮用户线程的调度以进程为单位进行,在采用时间片轮转调度算法时,每个进程分配相同的时间片。对内核级线程,每转调度算法时,每个进程分配相同的时间片。对内核级线程,每个线程分配时间片。个线程分配时间片。Multithreading Models多线程模型多线程模型nMany-to-One多对一多对一nOne-to-One一对一一对一nMany-to-Many 多对多多对多Many-to-One多对一多对一nMany User-Le

22、vel Threads Mapped to Single Kernel Thread.多个用户级线程映像进单个内核线程多个用户级线程映像进单个内核线程nUsed on Systems That Do Not Support Kernel Threads.用于不支持内核线程的系统中用于不支持内核线程的系统中n任一时刻只能有一个线程可以访问内核任一时刻只能有一个线程可以访问内核(并发性低并发性低)nThe entire process will block if a thread makes a blocking system call.一个用户线程发起系统调用一个用户线程发起系统调用而阻塞,则整

23、个进程阻塞。而阻塞,则整个进程阻塞。Many-to-one Model多对一模型多对一模型One-to-One一对一一对一nEach User-Level Thread Maps to Kernel Thread.每个用户级线程映像进内核线程每个用户级线程映像进内核线程nAllowing another thread to run when a thread makes a blocking system calln提供了更好的并发性提供了更好的并发性,一个用户线程发起系统调用一个用户线程发起系统调用而阻塞时允许另而阻塞时允许另一个线程运行一个线程运行n每创建一个用户级线程需创建一个相应的内核

24、线程每创建一个用户级线程需创建一个相应的内核线程,带来了额外开带来了额外开销销,所以许多系统限制应用中的线程数目所以许多系统限制应用中的线程数目nExamples-Windows 95/98/NT-OS/2One-to-one Model一对一模型一对一模型Many-to-many Model多对多模型多对多模型n多对一模型的缺点:不能实现真正的并发多对一模型的缺点:不能实现真正的并发n一对一模型的缺点:需限制应用中的线程数目一对一模型的缺点:需限制应用中的线程数目nMany-to-many model multiplexes many user-level threads to a smal

25、ler or equal number of kernel threads.n多对多模型:不限制应用的线程数、多个线程可以并发多对多模型:不限制应用的线程数、多个线程可以并发Many-to-many Model多对多模型多对多模型Two-level ModelnSimilar to M:M,except that it allows a user thread to be bound to kernel thread线程举例线程举例SUN Solaris 2 Solaris支持内核线程(Kernel threads)、轻权进程(Lightweight Processes)和用户线程(User

26、Level Threads)。一个进程可有大量用户线程;大量用户线程复用少量的轻权进程,不同的轻权进程分别对应不同的内核线程。Threads Support in Solaris 2 Solaris 2支持的线程支持的线程nSolaris 2 is a version of UNIX with support for threads at the kernel and user levels,symmetric multiprocessing,and real-time scheduling.Solaris 2 是是UNIX的一个版本,支持内核级和用户级线程,对称多处的一个版本,支持内核级和用

27、户级线程,对称多处理和实时调度理和实时调度nLWP intermediate level between user-level threads and kernel-level threads.LWP在用户级线程和内核级线程之间层次在用户级线程和内核级线程之间层次nResource needs of thread types:线程需要的资源线程需要的资源nKernel thread:small data structure and a stack;thread switching does not require changing memory access information relat

28、ively fast.内核线程内核线程:小数据结构及栈;线程切换不需要内存访问信息:小数据结构及栈;线程切换不需要内存访问信息-相对快相对快nLWP:PCB with register data,accounting and memory information,;switching between LWPs is relatively slow.LWP:带有寄存器数据的带有寄存器数据的PCB,记账和内存信息;在记账和内存信息;在LWP之间切换相对慢之间切换相对慢nUser-level thread:only need stack and program counter;no kernel i

29、nvolvement means fast switching.Kernel only sees the LWPs that support user-level threads.用户级线程用户级线程:只需栈及程序计数器;无内核涉及所以切换快。内核只关注:只需栈及程序计数器;无内核涉及所以切换快。内核只关注支持用户级线程的支持用户级线程的LWP轻权进程轻权进程(LightWeight Process)它是内核支持的用户线程它是内核支持的用户线程,是内核数据结构,驻留在内核空间。是内核数据结构,驻留在内核空间。一个进程可有一个或多个轻权进程,每个轻权进程由一个单独的一个进程可有一个或多个轻权进程

30、,每个轻权进程由一个单独的内核线程来支持。内核线程来支持。Kernel Threads 由内核调度程序进行调度由内核调度程序进行调度LWP 允许一个进程中发出多个并发的系统调用允许一个进程中发出多个并发的系统调用(因为有多个线程因为有多个线程)Without LWPs,user threads would contend at system callUser Threads 由线程库进行管理和调度由线程库进行管理和调度Solaris 2 Threads Solaris 2线程线程n用户级线程在使用系统调用时(如文件读写),需要用户级线程在使用系统调用时(如文件读写),需要“捆绑捆绑(bound

31、)”在一个在一个LWP上。上。n永久捆绑永久捆绑:一个:一个LWP固定被一个用户级线程占用,该固定被一个用户级线程占用,该LWP移到移到LWP池之外池之外n临时捆绑临时捆绑:从:从LWP池中临时分配一个未被占用的池中临时分配一个未被占用的LWPn对于没有绑定的对于没有绑定的LWP,则由线程库动态地进行调整:则由线程库动态地进行调整:n一个进程对应的一个进程对应的LWP组成组成LWP池,线程库动态调整池中池,线程库动态调整池中LWP的数目,以保证应用的最佳性能:的数目,以保证应用的最佳性能:n当池中的当池中的LWP全部阻塞,而进程中还有线程可以运行,全部阻塞,而进程中还有线程可以运行,则线程库会

32、为之创建另一个则线程库会为之创建另一个LWP;n当一个当一个LWP长时间没用(老化,一般为长时间没用(老化,一般为5分钟),则分钟),则线程库会删除它。线程库会删除它。线程举例线程举例n在使用系统调用时,如果所有在使用系统调用时,如果所有LWP已被其他用户级线程所占用已被其他用户级线程所占用(捆绑),则该线程阻塞直到有可用的(捆绑),则该线程阻塞直到有可用的LWP例如例如6个用户个用户级线程,而级线程,而LWP池有池有4个个LWPn如果如果LWP执行系统调用时阻塞(如执行系统调用时阻塞(如read()调用),则当前捆绑调用),则当前捆绑在在LWP上的用户级线程也阻塞。上的用户级线程也阻塞。Pr

33、ocess 1PermanentlyBoundThreadsProcess 1KTKTKTKTKTKTCPU 1CPU 1LWPUTUTUTUTLWPLWPUnboundThreadsPool of LWPs forUnbound ThreadsKernalUTLWP用户线程、轻权进程和核心线程的关系Solaris Process Solaris 线程线程Timesliceor PreemptWakeupStopBlockingSystemCallWakeupDispatchRunnableRunningActiveStoppedContinueStopStopStopSleepDispatc

34、hStopWakeupContinuePreemptStoppedRunnableActiveSleeping用户级线程轻权进程Solaris用户线程和轻权进程n有关的有关的C库函数库函数/*创建用户级线程*/int thr_create(void*stack_base,size_t stack_size,void*(*start_routine)(void*),void*arg,long flags,thread_t*new_thread_id);其中flags包括:THR_BOUND(永久捆绑),THR_NEW_LWP(创建新LWP放入LWP池),若两者同时指定则创建两个新LWP,一个永久

35、捆绑而另一个放入LWP池n有关的系统调用有关的系统调用/*在当前进程中创建LWP*/int _lwp_create(ucontext_t*contextp,unsigned long flags,lwpid_t*new_lwp_id);/*构造LWP上下文*/void _lwp_makecontext(ucontext_t*ucp,void(*start_routine)(void*),void*arg,void*private,caddr_t stack_base,size_t stack_size);/*注意:没有进行捆绑操作的系统调用*/n就绪状态就绪状态(Ready):进程已获得除处理

36、机外的所需资源,等待执行。进程已获得除处理机外的所需资源,等待执行。n备用状态备用状态(Standby):特定处理器的执行对象,系统中每个处理器上特定处理器的执行对象,系统中每个处理器上只能有一个处于备用状态的线程。只能有一个处于备用状态的线程。n运行状态运行状态(Running):完成描述表切换,线程进入运行状态,直到内完成描述表切换,线程进入运行状态,直到内核抢先、时间片用完、线程终止或进行等待状态。核抢先、时间片用完、线程终止或进行等待状态。n等待状态等待状态(Waiting):线程等待对象句柄,以同步它的执行。等待结线程等待对象句柄,以同步它的执行。等待结束时,根据优先级进入运行、就绪

37、状态。束时,根据优先级进入运行、就绪状态。n转换状态转换状态(Transition):线程在准备执行而其内核堆栈处于外存时,线程在准备执行而其内核堆栈处于外存时,线程进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。线程进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。n终止状态终止状态(Terminated):线程执行完就进入终止状态;如执行体有线程执行完就进入终止状态;如执行体有一指向线程对象的指针,可将线程对象重新初始化,并再次使用。一指向线程对象的指针,可将线程对象重新初始化,并再次使用。n初始化状态初始化状态(Initialized):线程创建过程中的线程状态;线程创建过程中

38、的线程状态;Windows NT运行终止就绪等待描述表切换抢先或时间片结束等待对象句柄执行完成初始化转换备用选择执行抢先放入就绪队列等待完成等待完成换出的内核堆栈换入的内核堆栈重新初始化创建和初始化线程对象Windows NT的线程状态Windows 2000线程状态ResourceAvailableUnblock/ResumeResource AvailableUnblockResource Not AvailableBlock/SuspendTerminateSwitchPick toRunPreemptedTransitionWaitingTerminatedNot RunnableRu

39、nnableReadyStandbyRunningWindows NT的线程状态NT线程的有关线程的有关APInCreateThread()函数在调用进程的地址空间上创建函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程一个线程,以执行指定的函数;返回值为所创建线程的句柄。的句柄。nExitThread()函数用于结束本线程。函数用于结束本线程。nSuspendThread()函数用于挂起指定的线程。函数用于挂起指定的线程。nResumeThread()函数递减指定线程的挂起计数,挂函数递减指定线程的挂起计数,挂起计数为起计数为0时,线程恢复执行。时,线程恢复执行。T

40、hread LibrariesnThread library provides programmer with API for creating and managing threadsnTwo primary ways of implementingnLibrary entirely in user spacenKernel-level library supported by the OSnExamples:nPOSIX PthreadsnWin32 threadsnJava threadPthreadsnMay be provided either as user-level or ke

41、rnel-levelnA POSIX standard(IEEE 1003.1c)API for thread creation and synchronizationnAPI specifies behavior of the thread library,implementation is up to development of the librarynCommon in UNIX operating systems(Solaris,Linux,Mac OS X)Win32 ThreadsnWin32 API is the primary API for Microsoft OS(Win

42、95,98,NT,2000,XP)nA kernel-level library on windows systemsJava Threads Java线程线程nJava threads are managed by the JVMnTypically implemented using the threads model provided by underlying OSnOn windows system,java threads are implemented using Win32 API nOn UNIX or Linux,use Pthreads nJava Threads May

43、 be Created by:Java线程可如下创建:线程可如下创建:nExtending Thread class 扩充线程类扩充线程类nImplementing the Runnable interface 实现可运行接口实现可运行接口Extending the Thread Class线程类型的扩展线程类型的扩展class Worker1 extends Threadpublic void run()System.out.println(“I am a Worker Thread”);Creating the Thread创建线程创建线程public class Firstpublic

44、static void main(String args)Worker1 runner=new Worker1();runner.start();System.out.println(“I am the main thread”);The Runnable Interface可运行接口可运行接口public interface Runnablepublic abstract void run();nRunnable接口提供了接口提供了run()方法,所以接下来要定义一个类实现方法,所以接下来要定义一个类实现Runnable接口的话,必须定义一个接口的话,必须定义一个run()方法方法Imple

45、menting the Runnable Interface可运行接口的实现可运行接口的实现class Worker2 implements Runnablepublic void run()System.out.println(“I am a Worker Thread”);类类Worker2实现了实现了Runnable接口,并定义了接口,并定义了run()方法方法Creating the Thread创建线程创建线程public class Secondpublic static void main(String args)Runnable runner=new Worker2();Thr

46、ead thrd=new Thread(runner);thrd.start();System.out.println(“I am the main thread”);/*创建了一个线程对象传递给创建了一个线程对象传递给Runnable对象,当这个新的线程由对象,当这个新的线程由start()方法创建后,新线程开始执行方法创建后,新线程开始执行Runnable对象的对象的run()方法方法*/Java Thread ManagementJava线程的管理线程的管理nsuspend()suspends execution of the currently running thread.挂起挂起-

47、暂停当前线程的运行暂停当前线程的运行nsleep()puts the currently running thread to sleep for a specified amount of time.睡眠睡眠-让当前线程入睡一段指定的时间让当前线程入睡一段指定的时间nresume()resumes execution of a suspended thread.恢复恢复-再执行被挂起的线程再执行被挂起的线程nstop()stops execution of a thread.停止停止-停止一个线程的执行停止一个线程的执行Java Thread States Java线程状态线程状态 Produ

48、cer Consumer Problem生产者消费者问题生产者消费者问题public class Server public Server()MessageQueue mailBox=new MessageQueue();Producer producerThread=new Producer(mailBox);Consumer consumerThread=new Consumer(mailBox);producerThread.start();consumerThread.start();public static void main(String args)Server server=n

49、ew Server();Producer Thread生产者线程生产者线程class Producer extends Thread public Producer(MessageQueue m)mbox=m;public void run()while(true)/produce an item&enter it into the buffer Date message=new Date();mbox.send(message);private MessageQueue mbox;Consumer Thread消费者线程消费者线程class Consumer extends Thread p

50、ublic Consumer(MessageQueue m)mbox=m;public void run()while(true)Date message=(Date)mbox.receive();if(message!=null)/consume the message private MessageQueue mbox;Threading IssuesnSemantics of fork()and exec()system callsnThread cancellationnSignal handlingnThread poolsnThread specific datafork and

51、exec system callsnfork is used to create a separate,duplicate processnin multithreaded program,some UNIX have two versions of fork:nduplicate all threads in the process 复制所有线程nused when no following exec callnduplicate only the thread calling fork只复制调用fork的线程nused when a immediately followed exec ca

52、llnexec replaces the entire process,including all threads exec参数所指定的程序会替换整个进程Two cancellation scenariosntarget thread:the thread to be cancellednasynchronous cancellation异步取消:one thread immediately terminates the target thread一个线程立即终止目标线程nmay be cancelled in the middle of updating data shared with o

53、ther threadsnmay not free a system-wide resourcendeferred cancellation延迟取消:the target thread can periodically check if it should terminate(at so called cancellation points in Pthread)目标线程检查它是否应该终止signal deliverynin single-thread programs,signals are always delivered to a process单线程进程中,信号总是发送给进程nin m

54、ultithreaded programs,where should a signal be delivered?在多线程进程中,信号被发送到哪里?nthe thread to which the signal applies 信号应用的线程nevery thread in the process进程中的所有线程ncertain threads in the process进程的某些线程na specific thread to receive all signals 接受信号的特定线程 Thread PoolsnWhy the thread pools?为什么要线程池navoid creat

55、ion and termination overhead,so that it is faster to service a request避免创建和撤销开销nput bound on number of threads,thus limit CPU and memory usage 限制线程的数量nconsiderationsnnumber of CPUsnamount of physical memorynexpected number of concurrent requests Thread-Specific Datanthreads belonging to a process sh

56、are the data of that processnthread-specific data线程特定数据 is a independent copy of certain data owned by one thread nexamplenin a transaction processing system,service each transaction in a separate threadntransaction ID to each threadnsupported in most thread libraries including Win32,Pthreads,JavaOp

57、erating System ExamplesnWindows XP ThreadsnLinux ThreadnSolaris threadsWindows XP ThreadsnImplements the one-to-one mapping,kernel-levelnEach thread containsnA thread idnRegister setnSeparate user and kernel stacksnPrivate data storage areanThe register set,stacks,and private storage area are known

58、as the context of the threadsnThe primary data structures of a thread include:nETHREAD(executive thread block)nKTHREAD(kernel thread block)nTEB(thread environment block)Windows XP ThreadsLinux ThreadsnLinux does not distinguish between processes and threads nLinux refers to them as tasks rather than

59、 process or threadnThread creation is done through clone()system call clone()n不是创建调用进程的复制不是创建调用进程的复制,而是创建一个独立进程以共享原来调用进程的而是创建一个独立进程以共享原来调用进程的地址空间地址空间,使使clone的任务能像独立线程一样工作的任务能像独立线程一样工作Linux Threadsnclone()allows a child task to share the address space of the parent task(process)nFlags determine how m

60、uch sharing is to take place between the parent and child nIf no flag is set when clone(),no sharing take place,resulting in functionality similar to fork()Linux ThreadsnWhen fork(),a task is created,along with a copy of all the associated data structures of the parent processnWhen clone(),a task is created,no copying of data structures,the task points to the data structures of the parent

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!