多线程
议程:
1.线程原理
2..Net下的多线程编程
3.异步编程
4.ASP.NET下的多线程编程
线程原理:
A.线程是程序执行的基本原子单位,一个进程可以由多个线程组成.
B.每个线程都维护异常处理程序,调度优先级和一组系统用于在调度该线程前保存线程上下文的结构.
C.在分布编程中,正确使用线程能够很好的提高应用程序的性能及运行效率.实现原理:将一个
进程分成多个线程,然后让他们并发异步执行,来提高运行效率.
D.并发执行并不是同时执行(占有CPU),任意时刻还是只能有一个线程占用CPU,只不过是它们争夺CPU
频繁一些.
什么时候使用线程?
1.如果多个线程在执行时都要抢占某个资源或几个资源,则最好不用异步线程执行.因为他们是
并发执行,很可能同时争夺某个资源,这时要么执行资源分配算法,判断哪个优先级高,需要发费时间.
或者按时间片算法,轮询/交接/让出CPU所需时间.
2.如果多个线程所需要的系统资源是比较均匀的,这时完全可以让它们异步并发执行.
使用线程的缺点:
1.保存进程和线程所需的上下文信息会使用内存.因此可创建的进程,AppDomain对象和线程的数目
会受到可用内存的限制.
2.跟踪大量的线程将占用大量的处理器时间.如果线程过多,则其中大多数线程都不会产生明显的
进度.如果大多数当前进程处于一个进程中,则其他进程中的线程的调度频率就会很低.
3.使用许多线程控制代码执行非常复杂,并可能产生许多错误.
4.销毁线程需要了解可能发生的问题,并对那些问题进行处理.
NET下的多线程编程:
1.Thread类的使用
2.带参数线程
3.委托与线程
4.应用程序域
5.临界区操作
一:Thread类
A.启动线程:即新建并启动一个线程
Thread thread1=new Thread(new ThreadStart(Count));
其中的Count是将要被新线程执行的函数
B.杀死线程
在杀死线程前最好先判断它是否还活着(通过IsAlive属性),然后就可以调用Abort方法来杀死此
进程.
C:暂停线程
即让一个正在运行的线程休眠一段时间,如thread.Sleep(1000);
就是让线程休眠1秒钟.
D:优先级
Thread类中ThreadPriority属性,它来设置优先级,但不能保证操作系统会接受该优先级.
一个线程级可分为5种:
Normal,AboveNormal,BelowNormal,Highest,Lowest.
E:挂起线程
Thread类的Suspend方法用来挂起线程,直到调用Resume,此线程才可以继续执行.
如果线程已经挂起,那就不会起作用.
F:恢复线程
Resume方法用来恢复已经挂起线程,以让它继续执行,如果线程没挂起,也不会起作用.
Thread
1个线程的方法不包含任何参数,同时也不返回任何值.它的命名规则和一般函数的命名规则相同.
它即可以是静态的(static)也可以是非静态的(nonstatic).当它执行完毕后,相应的线程也就结束了,其
线程对象的IsAlive属性也就被设置为false了.
2..net的公用语言运行时(CLR)能区分两种不同类型的线程:前台线程和后台线程.两者的区别:
应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则不考虑其是否运行完毕
而直接退出,所有的后台线程在应用程序退出时都会自动结束.
3.一个线程是前台线程还是后台线程可由它的IsBackground属性来决定.
二:带参数的线程
1.创建线程时,将使用采用ThreadStart委托作为其唯一参数的构造函数创建Thread类的新实列.但线程在调用
Start前不会开始执行.调用"开始"后,将从由ThreadStart委托引用的方法的第一行开始执行.
2.当创建ThreadStart委托时,将标识处理事件的方法.若要使事件处理程序与事件关联,请将
该委托的一个实列添加到事件.每当事件出现时就调用事件处理程序,除非移除了该委托.
3.线程还能够调用带参数的方法,即使ThreadStart委托只带一个参数------表示状态的对象.
正是该对象应将参数传递给被调用的方法.
三:委托与线程
1.委托的基础
---委托使用的目标:把函数作为参数传递
---类似于C++的函数指针
---是事件处理的基础
---函数指针只能引用静态函数,而委托可以使用静态方法和实列方法,当委托引用
实列方法时委托不仅存储对方法入口点的引用,还存储对为其调用该方法的类实
列的引用.
---委托声明:
delegate double process(double db1);
delegate 函数返回类型名 委托名(函数参数)
四:应用程序域
1.应用程序域
a.操作系统和运行库环境会在应用程序域间提供某种形式的隔离.为了确保一个应用程序中的代码
不会对其他不相关的应用程序产生不良影响,这种隔离是必须的.
b..Net中新增了一个隔离层,成为应用程序域AppDomain,它是进程内部的一个逻辑独立部分.
c.应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的
隔离.在一个应用程序中出现错误不会影响其他应用程序.
d:使用应用程序域:
---能够在不停止整个进程的情况下停止单个应用程序.
---在一个应用程序中运行的代码不能直接访问其他应用程序中的代码或资源
1.线程原理
2..Net下的多线程编程
3.异步编程
4.ASP.NET下的多线程编程
线程原理:
A.线程是程序执行的基本原子单位,一个进程可以由多个线程组成.
B.每个线程都维护异常处理程序,调度优先级和一组系统用于在调度该线程前保存线程上下文的结构.
C.在分布编程中,正确使用线程能够很好的提高应用程序的性能及运行效率.实现原理:将一个
进程分成多个线程,然后让他们并发异步执行,来提高运行效率.
D.并发执行并不是同时执行(占有CPU),任意时刻还是只能有一个线程占用CPU,只不过是它们争夺CPU
频繁一些.
什么时候使用线程?
1.如果多个线程在执行时都要抢占某个资源或几个资源,则最好不用异步线程执行.因为他们是
并发执行,很可能同时争夺某个资源,这时要么执行资源分配算法,判断哪个优先级高,需要发费时间.
或者按时间片算法,轮询/交接/让出CPU所需时间.
2.如果多个线程所需要的系统资源是比较均匀的,这时完全可以让它们异步并发执行.
使用线程的缺点:
1.保存进程和线程所需的上下文信息会使用内存.因此可创建的进程,AppDomain对象和线程的数目
会受到可用内存的限制.
2.跟踪大量的线程将占用大量的处理器时间.如果线程过多,则其中大多数线程都不会产生明显的
进度.如果大多数当前进程处于一个进程中,则其他进程中的线程的调度频率就会很低.
3.使用许多线程控制代码执行非常复杂,并可能产生许多错误.
4.销毁线程需要了解可能发生的问题,并对那些问题进行处理.
NET下的多线程编程:
1.Thread类的使用
2.带参数线程
3.委托与线程
4.应用程序域
5.临界区操作
一:Thread类
A.启动线程:即新建并启动一个线程
Thread thread1=new Thread(new ThreadStart(Count));
其中的Count是将要被新线程执行的函数
B.杀死线程
在杀死线程前最好先判断它是否还活着(通过IsAlive属性),然后就可以调用Abort方法来杀死此
进程.
C:暂停线程
即让一个正在运行的线程休眠一段时间,如thread.Sleep(1000);
就是让线程休眠1秒钟.
D:优先级
Thread类中ThreadPriority属性,它来设置优先级,但不能保证操作系统会接受该优先级.
一个线程级可分为5种:
Normal,AboveNormal,BelowNormal,Highest,Lowest.
E:挂起线程
Thread类的Suspend方法用来挂起线程,直到调用Resume,此线程才可以继续执行.
如果线程已经挂起,那就不会起作用.
F:恢复线程
Resume方法用来恢复已经挂起线程,以让它继续执行,如果线程没挂起,也不会起作用.
Thread
1个线程的方法不包含任何参数,同时也不返回任何值.它的命名规则和一般函数的命名规则相同.
它即可以是静态的(static)也可以是非静态的(nonstatic).当它执行完毕后,相应的线程也就结束了,其
线程对象的IsAlive属性也就被设置为false了.
2..net的公用语言运行时(CLR)能区分两种不同类型的线程:前台线程和后台线程.两者的区别:
应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则不考虑其是否运行完毕
而直接退出,所有的后台线程在应用程序退出时都会自动结束.
3.一个线程是前台线程还是后台线程可由它的IsBackground属性来决定.
二:带参数的线程
1.创建线程时,将使用采用ThreadStart委托作为其唯一参数的构造函数创建Thread类的新实列.但线程在调用
Start前不会开始执行.调用"开始"后,将从由ThreadStart委托引用的方法的第一行开始执行.
2.当创建ThreadStart委托时,将标识处理事件的方法.若要使事件处理程序与事件关联,请将
该委托的一个实列添加到事件.每当事件出现时就调用事件处理程序,除非移除了该委托.
3.线程还能够调用带参数的方法,即使ThreadStart委托只带一个参数------表示状态的对象.
正是该对象应将参数传递给被调用的方法.
三:委托与线程
1.委托的基础
---委托使用的目标:把函数作为参数传递
---类似于C++的函数指针
---是事件处理的基础
---函数指针只能引用静态函数,而委托可以使用静态方法和实列方法,当委托引用
实列方法时委托不仅存储对方法入口点的引用,还存储对为其调用该方法的类实
列的引用.
---委托声明:
delegate double process(double db1);
delegate 函数返回类型名 委托名(函数参数)
四:应用程序域
1.应用程序域
a.操作系统和运行库环境会在应用程序域间提供某种形式的隔离.为了确保一个应用程序中的代码
不会对其他不相关的应用程序产生不良影响,这种隔离是必须的.
b..Net中新增了一个隔离层,成为应用程序域AppDomain,它是进程内部的一个逻辑独立部分.
c.应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的
隔离.在一个应用程序中出现错误不会影响其他应用程序.
d:使用应用程序域:
---能够在不停止整个进程的情况下停止单个应用程序.
---在一个应用程序中运行的代码不能直接访问其他应用程序中的代码或资源
浙公网安备 33010602011771号