进程与线程

合集下载

线程、进程的区别、优缺点

线程、进程的区别、优缺点

线程、进程的区别、优缺点进程的特点:每⼀个进程都有⾃⼰的独⽴的⼀块内存空间、⼀组资源系统。

其内部数据和状态都是完全独⽴的。

进程是操作系统进⾏资源分配的基本单位;线程是操作系统进⾏调度的基本单位。

同⼀进程下的线程不仅共享进程资源和内存,每个线程还可有⼀个属于它⾃⼰的内存空间——线程栈。

以下4⾏是我能理解的范围:多线程的优点:线程间切换快,共享数据,多核cpu利⽤率多线程的缺点:多线程同步、加锁控制较负责;多进程的优点:独⽴多进程的缺点:调度开销⼤====结==束=============结==束============结==束===============================================可以参考的:多线程的优点:⽆需跨进程边界;程序逻辑和控制⽅式简单;所有线程可以直接共享内存和变量等;线程⽅式消耗的总资源⽐进程⽅式好;多线程缺点:每个线程与主程序共⽤地址空间,受限于2GB地址空间;线程之间的同步和加锁控制⽐较⿇烦;⼀个线程的崩溃可能影响到整个程序的稳定性;到达⼀定的线程数程度后,即使再增加CPU也⽆法提⾼性能,例如Windows Server 2003,⼤约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;线程能够提⾼的总性能有限,⽽且线程多了之后,线程本⾝的调度也是⼀个⿇烦事⼉,需要消耗较多的CPU多进程优点:每个进程互相独⽴,不影响主程序的稳定性,⼦进程崩溃没关系;通过增加CPU,就可以容易扩充性能;可以尽量减少线程加锁/解锁的影响,极⼤提⾼性能,就算是线程运⾏的模块算法效率低也没关系;每个⼦进程都有2GB地址空间和相关资源,总体能够达到的性能上限⾮常⼤多进程缺点:逻辑控制复杂,需要和主程序交互;需要跨进程边界,如果有⼤数据量传送,就不太好,适合⼩数据量传送、密集运算多进程调度开销⽐较⼤;如果多个线程要同时访问某个资源,怎么处理(java)?多线程的性能⼀定就由于单线程呢?不⼀定,要看具体的任务以及计算机的配置。

进程、线程、管程三者之间的关系

进程、线程、管程三者之间的关系

进程、线程、管程三者之间的关系首先我们先了解进程、线程、管程各自的概念:进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

线程:线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。

线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。

线程可以创建和撤消线程,从而实现程序的并发执行。

一般,线程具有就绪、阻塞和运行三种基本状态。

管程:管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

现在我们来了解进程和线程的关系:简而言之,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

下面我们用实际图解来加以分析进程和线程之间的关系:这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。

进程和线程面试题

进程和线程面试题

进程和线程⾯试题1、线程和进程线程:线程是进程的⼀个实体,是CPU调度和分派的基本单元。

进程:进程是具有⼀定独⽴功能的程序,它是系统进程资源分配和调度的⼀个独⽴单元。

区别:(1)⼀个线程只属于⼀个进程,⼀个进程包含⼀个或者多个线程。

(2)进程拥有独⽴的内存单元,⽽多个线程共享内存。

(3)进程的创建调⽤fork或者vfork,⽽线程的创建调⽤pthead_create,进程结束后它拥有的所有线程都将销毁,⽽线程的结束不会影响同个进程中的其他线程的结束。

(4)线程是轻量级的进程,它的创建和销毁所需要的时间⽐进程⼩很多,所有操作系统中的执⾏功能都是创建线程去完成的。

(5)线程中执⾏时⼀般都要进⾏同步和互斥,因为他们共享同⼀进程的资源。

2、死锁?死锁产⽣的原因?死锁的必要条件?怎么处理死锁?死锁:死锁是指两个或者两个以上的进程在执⾏过程中,由于竞争资源或者由于彼此通信⽽造成的⼀种阻塞的现象。

死锁原因:系统资源不⾜、相互竞争资源。

请求资源顺序不当死锁的必要条件:1.互斥条件:⼀个资源每次只能被⼀个进程使⽤。

2.请求和保持条件:⼀个进程因请求资源⽽阻塞时,对已获得的资源保持不放。

3.不可剥夺条件:进程已获得的资源,在未使⽤完之前,不能强⾏剥夺,只能在进程使⽤完时由⾃⼰释放。

4.循环等待条件:若⼲进程之间形成⼀种头尾相接的循环等待资源关系。

避免死锁的⽅法:因为互斥是不可改变的,所以只能破坏其他三个条件中的⼀个来解除死锁,⽅法:剥夺资源、杀死其中⼀个线程。

避免死锁最简单的⽅法就是阻⽌循环等待条件,将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以⼀定的顺序做操作来避免死锁。

3、如何在Java中实现线程?(1)继承Thread类(2)实现Runnable接⼝(3)实现Callable接⼝通过FutureTask包装器来创建Thread线程(4)使⽤ExecutorService、Callable、Future实现有返回结果的多线程4、⽤Runnable还是Thread?Java不⽀持类的多重继承,但允许你调⽤多个接⼝(当然是调⽤Runnable接⼝更好)5、Thread类中start()和run()⽅法有什么区别?(1)start()⽅法被⽤来启动新创建的线程,⽽start()内部调⽤了run()⽅法。

第二章 - 进程和线程

第二章 - 进程和线程

2.4 线

2.4.1 线程概念 现代操作系统中,进程只作为资源拥有者, 而调度和运行的属性赋予新的实体——线 而调度和运行的属性赋予新的实体——线 程。 线程(Thread)是进程中实施调度和分派 线程(Thread)是进程中实施调度和分派 的基本单位
2.4.1 线程概念
1.线程的组成 每个线程有一个 thread结构,即 thread结构,即 线程控制块,用 于保存自己私有 的信息,主要由 以下4 以下4个基本部 分组成:
2.4.1 线程概念
4.线程和进程的关系 ① 一个进程可以有多个线程,但至少要有一个线程; 而一个线程只能在一个进程的地址空间内活动。 ② 资源分配给进程,同一进程的所有线程共享该进 程的所有资源。 ③ 处理机分配给线程,即真正在处理机上运行的是 线程。 ④ 线程在执行过程中需要协作同步。不同进程的线 程间要利用消息通信的办法实现同步。
程同时访问和操纵相同的数据时,最后的执行结 果取决于进程运行的精确时序。
竞争条件(Race Condition),即两个或多个进 Condition),即两个或多个进
2.5.2 临界资源和临界区
1.临界资源和临界区 一次仅允许一个进程使用。我们把这类共 享资源称为临界资源( 享资源称为临界资源(Critical Resource)。 Resource)。 在每个进程中访问临界资源的那段程序叫 临界区( Section),简称CS区。 做临界区(Critical Section),简称CS区。
2.3.3 进程终止
(1)正常终止 (2)异常终止 (3)外部干扰
2.3.3 进程终止
终止进程的主要操作过程如下: 找到指定进程的PCB 找到指定进程的PCB 终止该进程的运行 回收该进程所占用的全部资源 终止其所有子孙进程,回收它们所占用的 全部资源。 将被终止进程的PCB从原来队列中摘走 将被终止进程的PCB从原来队列中摘走

进程与线程的定义、关系及区别

进程与线程的定义、关系及区别

进程与线程的定义、关系及区别进程与线程的定义、关系及区别⼀、进程的定义进程:指在系统中能独⽴运⾏并作为资源分配的基本单位,它是由⼀组机器指令、数据和堆栈等组成的,是⼀个能独⽴运⾏的活动实体。

进程⼀般有三个状态:就绪状态、执⾏状态和等待状态【或称阻塞状态】;进程只能由⽗进程建⽴,系统中所有的进程形成⼀种进程树的层次体系;挂起命令可由进程⾃⼰和其他进程发出,但是解除挂起命令只能由其他进程发出。

进程控制块(PCB):PCB不但可以记录进程的属性信息,以便对进程进⾏控制和管理,⽽且PCB标志着进程的存在,操作系统根据系统中是否有该进程的进程控制块PCB⽽知道该进程存在与否。

系统建⽴进程的同时就建⽴该进程的PCB,在撤销⼀个进程时,也就撤销其PCB,故进程的PCB对进程来说是它存在的具体的物理标志和体现。

⼀般PCB包括以下三类信息:进程标识信息;处理器状态信息;进程控制信息。

由程序段、相关的数据段和PCB三部分构成了进程实体(⼜称进程印像),⼀般,我们把进程实体就简称为进程。

进程的特征:1.动态性:进程的实质是程序的⼀次执⾏过程,进程是动态产⽣,动态消亡的。

2.并发性:任何进程都可以同其他进程⼀起并发执⾏。

3.独⽴性:进程是⼀个能独⽴运⾏的基本单位,同时也是系统分配资源和调度的独⽴单位。

4.异步性:由于进程间的相互制约,使进程具有执⾏的间断性,即进程按各⾃独⽴的、不可预知的速度向前推进。

⼆、线程的定义线程:线程是进程中的⼀个实体,作为系统调度和分派的基本单位。

线程的性质:1.线程是进程内的⼀个相对独⽴的可执⾏的单元。

若把进程称为任务的话,那么线程则是应⽤中的⼀个⼦任务的执⾏。

2.由于线程是被调度的基本单元,⽽进程不是调度单元。

所以,每个进程在创建时,⾄少需要同时为该进程创建⼀个线程。

即进程中⾄少要有⼀个或⼀个以上的线程,否则该进程⽆法被调度执⾏。

3.进程是被分给并拥有资源的基本单元。

同⼀进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使⽤他们。

进程和线程的区别

进程和线程的区别

进程和线程的区别进程:指在系统中正在运⾏的⼀个应⽤程序;程序⼀旦运⾏就是进程;或者更专业化来说:进程是指程序执⾏时的⼀个实例,即它是程序已经执⾏到课中程度的数据结构的汇集。

从内核的观点看,进程的⽬的就是担当分配系统资源(CPU时间、内存等)的基本单位。

线程:系统分配处理器时间资源的基本单元,或者说进程之内独⽴执⾏的⼀个单元执⾏流。

进程——资源分配的最⼩单位,线程——程序执⾏的最⼩单位。

线程进程的区别体现在4个⽅⾯:1、因为进程拥有独⽴的堆栈空间和数据段,所以每当启动⼀个新的进程必须分配给它独⽴的地址空间,建⽴众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说⼗分“奢侈”,系统开销⽐较⼤,⽽线程不⼀样,线程拥有独⽴的堆栈空间,但是共享数据段,它们彼此之间使⽤相同的地址空间,共享⼤部分数据,⽐进程更节俭,开销⽐较⼩,切换速度也⽐进程快,效率⾼,但是正由于进程之间独⽴的特点,使得进程安全性⽐较⾼,也因为进程有独⽴的地址空间,⼀个进程崩溃后,在保护模式下不会对其它进程产⽣影响,⽽线程只是⼀个进程中的不同执⾏路径。

⼀个线程死掉就等于整个进程死掉。

2、体现在通信机制上⾯,正因为进程之间互不⼲扰,相互独⽴,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,⽽线程由于共享数据段所以通信机制很⽅便。

3、体现在CPU系统上⾯,线程使得CPU系统更加有效,因为操作系统会保证当线程数不⼤于CPU数⽬时,不同的线程运⾏于不同的CPU 上。

4、体现在程序结构上,举⼀个简明易懂的列⼦:当我们使⽤进程的时候,我们不⾃主的使⽤if else嵌套来判断pid,使得程序结构繁琐,但是当我们使⽤线程的时候,基本上可以甩掉它,当然程序内部执⾏功能单元需要使⽤的时候还是要使⽤,所以线程对程序结构的改善有很⼤帮助。

什么情况下使⽤进程个线程:1、需要频繁创建销毁的优先使⽤线程;因为对进程来说创建和销毁⼀个进程代价是很⼤的2、线程的切换速度快,所以在需要⼤量计算,切换频繁时⽤线程,还有耗时的操作使⽤线程可提⾼应⽤程序的响应3、因为对CPU系统的效率使⽤上线程更占优,所以可能要发展到多机分布的⽤进程,多核分布⽤线程4、并⾏操作时使⽤线程,如C/S架构的服务器端并发线程响应⽤户的请求5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好因为我的项⽬中需要对数据段的数据共享,可以被多个程序所修改,所以使⽤线程来完成此操作,⽆需加⼊复杂的通信机制,使⽤进程需要添加复杂的通信机制实现数据段的共享,增加了我的代码的繁琐,⽽且使⽤线程开销⼩,项⽬运⾏的速度快,效率⾼。

简述进程与线程的区别

简述进程与线程的区别

简述进程与线程的区别在操作系统中,你知道进程与线程的区别有哪些?下面是店铺为你整理的简述进程与线程的区别,供大家阅览!进程与线程的区别进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程是进程的一个实体, 是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

进程是什么?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。

程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。

这是这样的设计,大大提高了CPU的利用率。

进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。

有了进程为什么还要线程?进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。

很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上:进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。

进程和线程是什么关系与区别

进程和线程是什么关系与区别

进程和线程是什么关系与区别
进程
进程是程序的⼀次执⾏过程,是⼀个动态概念,是程序在执⾏过程中分配和管理资源的基本单位,每⼀个进程都有⼀个⾃⼰的地址空间,⾄少有5 种基本状态,它们是:初始态,执⾏态,等待状态,就绪状态,终⽌状态。

线程
线程是CPU调度和分派的基本单位,它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源。

【进程是资源分配的最⼩单位,线程是CPU调度的最⼩单位】
进程和线程的关系
线程是进程的⼀部分
⼀个线程只能属于⼀个进程,⽽⼀个进程可以有多个线程,但⾄少有⼀个线程
进程和线程的区别
理解它们的差别,我从资源使⽤的⾓度出发。

(所谓的资源就是计算机⾥的中央处理器,内存,⽂件,⽹络等等)
根本区别:进程是操作系统资源分配的基本单位,⽽线程是任务调度和执⾏的基本单位
开销⽅⾯:每个进程都有独⽴的代码和数据空间(程序上下⽂),进程之间切换开销⼤;线程可以看做轻量级的进程,同⼀类线程共享代码和数据空间,每个线程都有⾃⼰独⽴的运⾏栈和程序计数器(PC),线程之间切换的开销⼩
所处环境:在操作系统中能同时运⾏多个进程(程序);⽽在同⼀个进程(程序)中有多个线程同时执⾏(通过CPU调度,在每个时间⽚中只有⼀个线程执⾏)
内存分配:系统为每个进程分配不同的内存空间;⽽对线程⽽⾔,除了CPU外,系统不会为线程分配内存(线程所使⽤的资源来⾃其所属进程的资源),线程组之间只能共享资源
包含关系:线程是进程的⼀部分,所以线程也被称为轻权进程或者轻量级进程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Process类常用属性和方法
Basepriority 进程优先级(只读) Priortyclass 设置或更改进程优先级 ExitCode 获取关联进程终止时指定的值 一般为0表 明进程成功退出 ExitTime 退出时间 HasExited 是否已终止 Id 进程唯一的标示符 MachineName 进程所运行的计算机名(本机名: Environment.machinename)
线程同步
• 当多个线程要对同一资源进行访问时,会出现如下问题: • 线程1在操作变量1,但线程1对变量1的操作没完成时,线 程1执行的时间已到,执行权交给线程2,此时线程2读取 变量1时读取的就是未知或者错误的数据。 • 要解决这一问题,.NET提供了很多方法,最简单的还是 lock • Lock’可以锁定某一变量,使得锁定范围内的代码期间只 能被一个单一线程操作(进入),操作完成后,其他线程 才可以进入执行。 • Demo 使用Lock实现线程同步 一个经典的多人同时提款 问题
• Demo:在线程池中执行任务
BackGroundWorker组建
• 当某些代码或者任务耗时比较长时,我们需要将 这些任务放在线程内执行,以避免影响主线程与 用户的交互。 • 这些工作用线程即可以实现,但在.NET中提供了 一个BackGroundWorker组件,专门用于完成这 些需要在后台线程内执行的工作,并可以通知主 线程任务进度及发送任务完成的消息。 • BackGroundWorker可以通过编程创建,也可以 通过工具箱拖放创建。
• GetProcessById 通过ID获取对应进程 • GetProcesses 获取本机所有进程 • Start 启动一个新进程
• DEMO 进程管理 启动和停止进程
线程
• System.threading下的Thread类,用于对线 程进行管理。 • Thread类方法和属性 • IsAlive • IsBackGround • IsThreadPoolThread • Priority • Join Start Sleep Abort
• StandardInput 获取用于写入应用程序输入 的流 • Standardoutput 获取应用程序输出的流 • Close • CloseMainWindow 向进程主窗口发送关闭 消息来管理具有用户界面的进程 • Kill 强制管理 • WaitForExit 设置等待关联进程退出的时间
前台线程和后台线程
• 一个线程要么是前台线程要么是后台线程, 两种线程基本是一样的,区别是后台线程 不会影响进程终止,当属于某个进程的所 有前台线程都终止后,公共语言运行库就 会结束该进程,而且属于该进程的后台线 程也都会停止运行,而不管后台工作是否 完成。
线程管理
• • • • • • • 启动线程 Thread th=new Thread(方法名); th.Start(参数); 停止线程 Th.Abort(); 暂停线程 Th.sleep(暂停时间);
• MainModule 关联进程的主模块(DLL EXE) • ProcessName 进程名称 • Startinfo 设置或获取要传递给进程的文件 名及启动参数 • StartTime • Threads 获取在进程中运行的一组线程 • WorkingSet64 物理内存 • PeakWorkSet64 使用的最大物理内存
• • • • •
BackGroundWorker方法和属性 ReportProcess 引发ProcessChanged事件 RunWorkAsync 开始执行后台操作 DoWork事件 调用RunWorkAsync时发生 RunWorkComplete 当后台操作完成、被取 消或者异常时发生 • Demo: BackGroundWorker使用
线程池
• 线程池是在后台执行多个任务的线程集合。 • 线程池的主要作用是限制同一时间内创建 的线程数量。 • 线程队列 先到先执行 • 每一个进程都有一个线程池,一般允许最 多25个线程存在。 • 所有线程池内的线程都是后台线程,也就 是会所不会影响主线程的结束。
• System.Threading.ThreadPool • ThreedPool常用方法 • GetAvailableThreads 检索线程池最大数目和当前 活动线程的差值 • GetMaxThreads 检索可以同时处于活动状态的线 程池请求的数目 • GetMinThreads 维护的空闲线程数目 • SetMaxThreads SetMinThreads • QeueUserWorkItem 将方法排入队列以便执行
第二章 进程与线程
进程与线程的概念
• 从概念上: 进程:一个程序对一个数据集的动态执行过 程,是分配资源的基本单位。 线程:一个进程内的基本 调度单位。 线程的划分尺度小于进程,一个进程包含一 个或者更多的线程。 • 从执行过程中来看: 进程:拥有独立的内存单元,而多 个线程共享内存,从而提高了应用程序的运行效率。 线 程:每一个独立的线程,都有一个程序运行的入口、顺序 执行序列、和程序的出口。但是线程不能够独立的执行, 必须依存在应用程序中,由应用程序提供多个线程执行控 制。 • 从逻辑角度来看:(重要区别) 多线程的意义在于一个 应用程序中,有多个执行部分可以同时执行。但是,操作 系统并没有将多个线程看做多个独立的应用,来实现进程 的调度和管理及资源分配。
• • • • • • •
合并线程 Thread th2=new Thread(); Th2.start(); ……. Public method(){…th2.join()…} Thread th1=new Thread(method); Th1.start();
Volatile关键字
• Volatile 字面的意思时易变的,不稳定的。在C#中也差不 多可以这样理解。 • 编译器在优化代码时,可能会把经常用到的代码存在 Cache里面,然后下一次调用就直接读取Cache而不是内 存,这样就大大提高了效率。但是问题也随之而来了。 • 在多线程程序中,如果把一个变量放入Cache后,又有其 他线程改变了变量的值,那么本线程是无法知道这个变化 的。它可能会直接读Cache里的数据。但是很不幸, Cache里的数据已经过期了,读出来的是不合时宜的脏数 据。这时就会出现bug。 • 用Volatile声明变量可以解决这个问题。用Volatile声明的 变量就相当于告诉编译器,我不要把这个变量写Cache, 因为这个变量是可能发生改变的。
• 在网络编程中,通常要使用多线程的概念 • 考虑在C/S的模式下,服务器端需要同时监 听或者处理多个客户端的请求,如果单线 程的话,在同一时间内,只有一个客户端 的清楚可以被处理。 • 另外当需要执行一些长时间任务或者等待 相应的时候也可以使用多线程技术。
C#进程管理
• 在System.Diagnostics命名控件下,有一个 Process类,用于完成与进程相关的处理任 务。 • 一个应用程序执行或者调用其他的应用程 序,实际上就是对进程进行管理。 • 比如常见的VSTO应用程序。
Demo:跨线程就不再允许在线程内访问 其他线程内的控件,如果要访问,需要使 用委托来实现。 • Demo:跨线程访问控件 • 通过例子可以看出两个具有相同优先级的 线程同时执行时,可以看做是同步的。
线程同步和线程池
• 多个线程同时运行,可能会因为线程之间 的逻辑关系而决定谁先执行谁后执行,这 就是线程同步。 • 由于内存有限,我们不可能让系统无限制 的创建大量线程,为了解决资源和效率问 题,引入了线程池的概念。
相关文档
最新文档