so true

心怀未来,开创未来!
随笔 - 160, 文章 - 0, 评论 - 40, 引用 - 0
数据加载中……

程序、进程、线程学习笔记

程序是计算机指令的集合,它以文件的形式存储在计算机磁盘上;而进程是一个正在运行的程序的一个实例,是程序在其自身的地址空间中的一次执行活动。
程序不占用系统的运行资源,程才可以申请资源、被系统调度、独立运行。
一个程序可以对应多个进程,一个进程中也可以同时访问多个程序。
进程由内核对象和地址空间两部分组成。内核象是操作系统分配出的有特定数据结构的一内存块,用于维护进程的各种信息,进程不能直接访问该内存块,只能通过系统给提供的一些函数来获取一些信息。地址空间包含了所有可执行模块或DLL模块的代码和数据,还包括动态内存分配的空间,比如运行中线程需要分配的堆栈和堆空间。
进程是线程的容器,是线程的运行环境,真正完成执行地址空间中代码的是线程。
一个进程可以有多个线程,这些线程都执行该进程内的同一地址空间中的代码。
一个进程至少得有一个线程来执行其地址空间中的代码。创建进程时,操作系统就会自动创建该进程的第一个线程,也就是主线程,然后再由主线程来调用其它线程,我们常说的main或WinMain函数就是主线程的入口函数。
对于32位的进程来说,地址空间最大为4GB,这由进程指针的寻址能力所限,而且对于每个进程而言,该地址空间都是它私有的,其他的进程是不能访问的,而且我们所说的地址空间是虚拟的地址空间,怎么理解虚拟二字呢?就是说将物理内存和页面文件中的某部分拿出来映射为我们这里的地址空间,它只是内存地址的一个范围。
线程也是由对应于它的内核对象以及线程堆栈组成,这里的内核对象也是一个有特定数据结构的内存块,由于系统管理线程的统计信息。
由一个进程创建的多个线程之间的地位都是平等的,它们都可以随意的访问进程内核对象中的所有句柄等等属于该进程的信息,而且各个线程之间是可以互相随意的访问彼此的线程堆栈的,因此线程间通信就很容易了,而且线程只有一个内核对象和堆栈,因此占用的内存少,所以提倡多线程编程,而不是创建多个进程。
对于一个CPU,在某时刻只能有一个线程在运行,多个线程的运行是通过时间片轮转来实现的,并不是真正意义上的同时运行。

posted on 2008-02-23 19:29 so true 阅读(336) 评论(0)  编辑  收藏 所属分类: C&C++


只有注册用户登录后才能发表评论。


网站导航: