什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:
- 进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。
- 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。(图一)
- 同一进程中的两段代码不能够同时执行,除非引入线程。
- 线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。
- 线程占用的资源要少于进程所占用的资源。
- 进程和线程都可以有优先级。
- 在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。
aspectratio="t">
vc/images/10821/sp_teach_411.gif" src="./0005.files/image001.gif">
图一
一个最简单的例子就是在屏幕上画多个跳动的小球,我们对每个球的绘制都可以采用一个线程来完成。但是象这样的线程间完全独立没有影响没有数据交换的情况是很少的。
下面我们看一个例子,一个应用要完成两个任务:每次产生1000个随机数写入文件并从文件中读出数据并以该随机数为圆心画圆,对该操做进行100次,并使用100个不同的文件保存文件。传统做法如下:
void do_this(void)
{
for(int i=0;i<100;i++)
{
/// step 1
generate 1000 randam number;