面试例题(51-55)

16.1进程

面试例题51:请描述进程和线程的差别。

答案

  1. 进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元(通俗的讲:线程是进程的中执行的一个代码片段)
  2. 一般情况下进程间是相互独立的无法共享储存空间,但线程同属于一个进程的,可以共享内存空间。
  3. 同一进程中的两段代码无法同时执行,除非引入线程。
  4. 线程是属于进程的,当进程退出时,他所产生的线程都会被强制退出并清除。
  5. 进程和线程都可以有优先级。

解析
进程是程序的一次执行,而什么是线程呢?线程可以理解为进程中执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者的差别。
进程间是独立的,这表现在内存空间、上下文环境上,线程运行在进程空间内。
一般来讲,进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。
同一进程中的两段代码不能够同时执行,除非引入线程。
线程是属于进程的,当进程退出时该进程产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。进程和线程都可以有优先级。

面试例题52:进程间的通信如何实现?

答案
现在最常用的进程间通信方式有:信号,信号量,消息队列,共享内存。

所谓进程通信,就是不同进程之间进行一些“接触”。这种接触有简单,也有复杂。机制不同,复杂度也不一样、通信是一个广义上的意义,不仅仅指传递一些消息。它们的使用方法是基本相同的,所以只要掌握了一种使用方法,然后记住其他的使用方法就可以了。信号在我学习的内容中,主要接触了信号来实现同步的机制,据说信号也可以用来做其他的事情,但是我还不知道做什么。
信号和信号量是不同的,它们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者是使用P、V操作来实现的。消息队列是比较高级的一种进程间通信方法,因为它真的可以在进程间传送消息,你传送一个“i love you”都可以。
一个消息队列可以被多个进程所共享;如果一个进程的消息太多,一个消息队列放不下,也可以用多于一个的消息队列。共享消息队列的进程所发送的消息中除了消息本身外还有一个标志,这个标志可以指明该消息将由哪个进程或者是哪类进程接受。每一个共享消息队列的进程针对这个队列也有自己的标志,可以用来声明自己的身份。

面试例题53:在网络编程中设计并发服务器,使用多进程与多线程有什么区别?

解析
进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
线程:相对于进程而言,线程是一个更加接近于执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

SMP(Symmetric
Multi-Processing),对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。

答案:
用多进程时每个进程有自己的地址空间,线程则共享地址空间。所有其他区别都是由此而来的:
速度:线程产生的速度快,线程间的通信快、切换快等,因为它们在同一个地址空间内。
资源利用率:线程的资源利用率比较好也是因为它们在同一个地址空间内。
同步问题:线程使用公共变量/内存时需要使用同步机制,还是因为它们在用一个地址空间内。

面试例题54:在Windows编程中互斥器的作用和临界区类似,请说一下两者间的主要区别。

解析:多线程编程问题。
答案:两者的区别是互斥器可以用于进程之间互斥,临界区是线程之间的互斥。

面试例题55:进程进入等待状态有哪几种方式?

解析:操作系统问题。
答案
CPU调度给优先级更高的线程,原先线程进入等待状态。
阻塞的线程获得资源或者信号,进入等待状态。
在时间片轮转的情况下,如果时间片到了,也将进入等待状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值