在操作系统里有两个很重要的概念:进程和线程。一般,简单的理解进程就是一个应用程序在内存中的实例,比如你的word.exe安静的躺在硬盘上,然后你双击它,它启动了,加载到内存,这就创建了一个进程,你可以在任务管理器里看到这个进程的存在,然后你再打开一个word.exe,又一个进程创建了。一般,进程象征着数据资源,对应着内存,模拟出一个假象:整个计算机好像就只有OS和当前这个应用程序。
内存模拟出来了,那CPU呢?毕竟机器内的CPU core是有限的,大部分机器两个或四个。但是你可能想运行很多程序,那可怎么办,OS就会通过一种调度算法,一会儿让你执行一会儿,一会儿让另外一个程序执行一会儿,只要这个切换过程足够快,给我们的感觉就好像是所有的程序都在同时地执行。那这个一会儿让你执行一会儿,一会儿让别人执行一会儿就需要抽象,不然不要把你的代码分成一段段的么,这个抽象的结果就是线程,你的代码由一个线程执行,这给你的感觉就好像是你的代码一直占用着整个CPU,不过实际上是CPU在不同的线程中频繁的切换(context switch)。
我们知道,要创建快速响应的桌面软件,我们就得将一些耗时操作,比如访问远程数据库,访问大文件等放到与UI主线程不同的线程里去做,免得阻塞主线程,造成UI挂起的现象,用户以为程序挂了。如是我们就以为Thread是一剂良方,可以充分利用CPU的资源。如是:
object sender,EventArgs e)
2: {
new ThreadStart(GetBlogsFromDB);
new Thread(start);
5: thread.Start();
6: }
7:
void GetBlogsFromDB()
9: {
//...access remote database
11: }