全部博文(372)
2012年(372)
分类: 虚拟化
2012-03-15 21:23:02
1. 引言
先来个比喻手法:
如果把上课的过程比作进程,那么每个学生就是一个线程,他们共享教室,即线程共享进程的内存空间。每一个时刻,只能一个学生问老师问题,老师回答完毕,轮到下一个。即线程在一个时间片内占有cpu。
这个例子容易理解多了吧?!下面马上来看些基本概念。仅为个人理解,轻描淡写。
2. 进程
进程是表示资源分配的基本单位,又是调度运行的基本单位。从编程的角度,也可以将进程看成一块包含了某些资源的内存区域。
例如:当用户打开一个txt文档时,系统就创建一个进程,并为它分配资源。有时候打开得很慢,这是因为此时CPU运行的进程数过多,该进程需要等待调度,才能真正运行。如果再打开另外一个txt文档时,此时在资源管理器中会发现有两个进程,所占的内存数不一样,是因为文档的大小不相同。
所以我的理解是,只要是打开应用程序,就会创建进程。
在.NET框架在System.Diagnostics名称空间中,有一个类Process,可以用来创建一个新的进程。下面用代码来创建一个Hello.txt的记事本,运行代码后启动任务管理器,可以发现创建了一个记事本的进程。
3.线程
线程是进程中执行运算的最小单位,也是执行处理机调度的基本单位。实际上线程是轻量级的进程。那么为什么要使用线程呢?
(1)易于调度。 (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 (3)开销少。创建线程比创建进程要快,所需开销很少。。 (4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。 进程和线程的关系 (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 例如我们创建一个winform窗体时,创建一个线程,将内容赋值给文本框,点击获取数据。此时如果直接在委托方法里面操作会报异常,因为创建的线程不能访问UI控件,所以我们在获取数据的时候,通过Invoke或者BeginInvoke去异步调用。解决方法:
效果:
最后总结:进程和线程的知识点不是简单一两句话就能说清楚,自己只是稍微有个大概了解,学习之路任重而道远。