多线程理论笔记

1、多线程:在单个进程中,运行不同的线程,完成不同的工作。

2、线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。

3、消息队列:协调和控制程序中各个块之间的执行顺序。

4、一些线程模型:

(1)、单线程模型:一个进程只有一个线程,缺点在于完成一个很小的任务也需要占用很长的时间;

(2)块线程模型:又称单线程多块模型/STA,一个进程拥有多个块,且每个块独有一个线程;程序规定了每个块中线程的执行时间,再通过消息队列对这些块进行串行化控制运行;这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。

(3)多线程块模型:又称自由线程块模型/MAT;每个进程只有一个块,每个块有多个线程;这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。

5、进程与线程的概念:进程和线程都是操作系统的概念。

(1)进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。

(2)线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。

6、进程池:对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。

7、基本步骤:

(1)创建线程:

创建一个新的Thread对象的实例。Thread的构造函数接受一个参数:

Thread DummyThread = new Thread( new ThreadStart(dummyFunction) );

(2)执行线程:

使用Threading命名空间里的start方法来运行线程:

DummyThread.Start ();

(3)组合线程:

经常会出现需要组合多个线程的情况,就是当某个线程需要其他线程的结束来完成自己的任务。假设DummyThread必须等待DummyPriorityThread来完成自己的任务,只需要这样做:

DummyPriorityThread.Join() ;

(4)暂停线程:

使得线程暂停给定的秒

DummyPriorityThread.Sleep(<Time in Second>);

(5)中止线程:

如果需要中止线程可以使用如下的代码:

DummyPriorityThread.Abort();

8、实现多线程有两种方法:

(1)继承Thread类,

(2)实现Runable接口。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章