操作系统-面试题/进程与线程

一、进程是不活泼的。
进程从来不执行任何东西,只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程的存在。
二、进程使用的系统资源比线程多的多,原因是它需要更多的地址空间。为进程创建一个虚拟地址空间需要许多系统资源。系统中要保留大量的记录,这要占用大量的内存。
由于线程需要的开销比进程少,因此一般用增加线程来解决编程问题,而要避免创建新的进程。
每当进程被初始化时,系统就要创建一个主线程。该线程与C/C++运行期库的启动代码一道开始运行,启动代码则调用进入点函数,并且继续运行知道进入点函数,并且继续运行直到进入点函数返回并且C/C++运行期库的启动代码调用退出为止。对于许多应用程序来说,这个主线程是应用程序需要的唯一线程。不过,进程能够创建更多的线程来帮助执行他们的操作。
每个线程必须拥有一个进入点函数,线程从这个进入点 开始运行。即main, wmain, Wmain, wWin Main. 如果想要在你的进程中创建一个辅助线程,它必定也是一个进入点函数,类似下面的样子:

DWORD WINAPI ThreadFunc(PVOID pvParam)
{
   DWORD dwResult = 0;
   ...
   return(dwResult);
}

线程函数可以执行你想要它做的任何任务。最终,线程函数到达它的结尾处并且返回。这时,线程终止运行,该堆栈的内存被释放,同时,线程的内核对象的使用计数被递减。如果使用计数降为0,线程的内核对象就被撤销。与进程内核对象的情况相同,线程内核对象的寿命至少可以到达它们相关联的线程那样长,不过,该对象的寿命可以远远超过线程本身的寿命。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值