您的位置:首页 > 职场人生

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

2017-08-29 19:23 197 查看
一、进程是不活泼的。

进程从来不执行任何东西,只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程的存在。

二、进程使用的系统资源比线程多的多,原因是它需要更多的地址空间。为进程创建一个虚拟地址空间需要许多系统资源。系统中要保留大量的记录,这要占用大量的内存。

由于线程需要的开销比进程少,因此一般用增加线程来解决编程问题,而要避免创建新的进程。

每当进程被初始化时,系统就要创建一个主线程。该线程与C/C++运行期库的启动代码一道开始运行,启动代码则调用进入点函数,并且继续运行知道进入点函数,并且继续运行直到进入点函数返回并且C/C++运行期库的启动代码调用退出为止。对于许多应用程序来说,这个主线程是应用程序需要的唯一线程。不过,进程能够创建更多的线程来帮助执行他们的操作。

每个线程必须拥有一个进入点函数,线程从这个进入点 开始运行。即main, wmain, Wmain, wWin Main. 如果想要在你的进程中创建一个辅助线程,它必定也是一个进入点函数,类似下面的样子:

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


线程函数可以执行你想要它做的任何任务。最终,线程函数到达它的结尾处并且返回。这时,线程终止运行,该堆栈的内存被释放,同时,线程的内核对象的使用计数被递减。如果使用计数降为0,线程的内核对象就被撤销。与进程内核对象的情况相同,线程内核对象的寿命至少可以到达它们相关联的线程那样长,不过,该对象的寿命可以远远超过线程本身的寿命。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: