Windows常见面试题——进程、线程

1.什么是进程,什么是线程,请谈谈你的理解

答:进程和线程是操作系统中一个很重要的概念。进程是指操作系统中运行的应用程序,而线程是指程序中独立完成某一任务、实现某一功能所需的单元。进程就像一个工厂,可以完成某种产品的生产,而线程就像是工厂不同的部门,可以互补干扰独立的完成某项工作。一个进程至少运行着一个线程。

2.如何在不同进程中访问同一个内核对象。请说出至少三种方法

答:要访问内核对象,那么就需要在进程的句柄表中都有一个句柄项是指向此内核对象的。
a.由父进程继承给子进程,当父进程创建子进程时,若指定了继承句柄的属性,则子进程能够将父进程中所有可继承的句柄全部继承到自己的句柄表中。(但是即便继承了句柄,子进程却不知道自己继承了谁,句柄值是什么,只能由父进程通过进程通讯的方式告诉它)
b.在进程A中创建内核对象时,给内核对象命名,在进程B中通过名字打开内核对象。(如果内核对象不能命名或者没有一个标识,则不能采用此方法。)
c.使用DuplicateHandle()这个API打开对象,获得句柄。

3.当一个进程销毁时,内核对象句柄表中的句柄都会被销毁吗?结合引用计数,谈谈你对这个问题的理解。

答:每一个内核对象都有一个引用计数,你可以认为每一个内核对象结构体都有一个字段叫做引用计数,当有一个进程创建或打开了此内核对象,那么内核对象的引用计数自增1,进程终止或者关闭句柄,引用计数自减1,当引用计数减为0时,内核对象自动销毁。因此,当一个内核对象M在进程A创建,另外一个进程对象也使用了此内核对象,进程A退出后,M并不会被销毁,因为他还在进程B中使用,只有没有进程使用此内核对象,内核对象才会自动销毁。

4.请谈一下你所掌握的进程间通讯的方式,越详细越好。

a.WM_COPYDATA消息
WM_COPYDATA消息是一个专门用于数据传输的消息,可以携带一个大体积的消息参数。不过WM_COPYDATA的数据会被发送到目标进程的栈空间进行保存,因此单次发送的数据不宜过大
b.邮槽
邮槽是Windows系统最简单的一种进程间通讯方式,一个进程可以创建一个邮槽,其他进程可以通过打开此邮槽与创建邮槽的进程进行通讯。邮槽的通讯时单向的,服务端只能读取消息,客户端只能写入消息,消息被写入邮槽以队列的形式保存。

原文地址:http://blog.51cto.com/13652962/2088682

时间: 2024-08-26 09:39:12

Windows常见面试题——进程、线程的相关文章

java主线程等待所有子线程执行完毕在执行(常见面试题)

java主线程等待所有子线程执行完毕在执行(常见面试题) java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用户下单成功,下面就说一下我能想到的方法,欢迎大家批评指正: 用sleep方法,让主线程睡眠一段时间,当然这个睡眠时间是主观的时间,是我们自己定的,这个方法不推荐,但是在这里还是写一下,毕竟是解决方法 2.使用Thread的join()等待所有

Java 并发基础常见面试题总结

Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程. 如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当前运行的进程(.exe 文件的运行). 1.2

iOS 多线程 自动释放池常见面试题代码

同步:代码依次执行,一个人执行多个任务,也是依次执行.一个人在同一时间只执行一个任务 异步:可以同时执行多个任务 进程:指在系统中运行的应用程序,每个进程都是独立的,都有独立的且安全的运行空间 线程:一个进程可以有多个线程,但只有一个主线程.进程的任务都是在线程里面完成的. 进程,线程与多线程之间的关系? 进程=公司     线程 = 员工    多线程 = 老板 多线程可以解决程序阻塞问题,也可以提高程序的执行效率 自动释放池常见面试题代码 p.p1 { margin: 0.0px 0.0px

【转载】JAVA常见面试题及解答(精华)

JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多线程程序中,有时两个或更多的线程共

java常见面试题——java笔试题总结

注:本文转载自http://www.cnblogs.com/huajiezh/p/5790928.html,版权归其所有! Java常见面试题总结 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4.描述一下ArrayList和LinkedList各自实现和区别 5.Java中的队列都有哪些,有什么区别. 6.反射中,Class.forName和cl

献给 2018 还在艰苦奋斗的 Java 程序员,Java 常见面试题及答案!

1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟机执行的字节码文件. Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译. Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性. 2.JDK和JRE的区别是什么? JDK: java开发工具包,包含了JRE.编译器和其它工具(如:jav

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

asp.net常见面试题(一)

1.索引器 1 class Player 2 { 3 private int[] arr = new int[100]; 4 public int this[int index] 5 { 6 get { 7 if (index < 10 || index >= 10) 8 { 9 return 0; 10 } 11 else 12 { 13 return arr[index]; 14 } 15 } 16 set { 17 if (!(index < 0 || index >= 10

PHP常见面试题汇总(二)

PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1,2,"a","a"); $ac=array_count_values($array); /** * 输出结果: * Array( *   [4] => 1 *   [5] => 1 *   [1] => 2 *   [2] => 2 *   [3]