线程相关的面试题

一,请描述线程和进程的差别

进程是程序的一次执行,线程可以理解为进程中执行的一段程序片段。在一个多任务环境下以下概念可以帮助我们理解线程和进程之间的差别。

进程是独立的,这表现在空间内存,上下文环境上;线程运行在进程空间内,一般来讲(不使用特殊技术),进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。

同一进程中的两段代码不能同时执行,除非引入线程。

线程是属于进程的,当进程退出时,该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程占用的资源。进程和线程都可以有优先级。

进程间可以通过IPC通信,但是线程间不可以。

二,Windows将遵循下面的哪种搜索来定位DLL?

Windows平台下的大多数程序都使用各种动态链接库(DLL)来避免重复实现功能。操作系统为每个程序加载若干个DDL,具体由程序的类型决定。当程序不指定DLL的绝对位置时,将使用默认的搜索顺序来找到他,默认情况下,操作系统所使用的搜索顺序为:

  • 1)内存
  • 2)KnownDLLs
  • 3)清单与.local
  • 4)应用程序目录
  • 5)当前工作目录
  • 6)系统目录
  • 7)路径变量

 三,动态链接库与静态链接库

目前以lib为后缀的库有两种,一种是静态链接库,一种是动态链接库的导入库。虽然静态链接库和动态库的导入库都是.lib文件,但是区别很大。他们实质是不一样的东西。静态库本身就包含了实际执行代码,地址符号表等,而对于导入库而言,其实际的运行代码位于动态库中,导入库只是包括了地址符号表等,确保程序找到对应函数的一些基本地址信息。

当我们的应用工程在使用静态链接库的时候,静态链接库要参与编译,在生成可执行文件之前的链接过程中,将静态链接库的全部指令直接链接接入可执行文件中。故而,在可执行文件生成以后,静态链接库.lib可以弃之不用,但是动态链接库不可以。

静态链接库与动态链接库都是共享代码的方式。

区别如下:

  1. 如果采用静态链接库,lib中的指令全部都被直接包含在最终生成的exe文件中了。但是若是使用动态链接库(dll),该dll不必被包含在最终exe中,exe文件执行时动态的引用和卸载这个与exe独立的dll文件。
  2. 动态链接库与静态链接库的另一个区别在于静态链接库中不能在包含其他的动态链接库或者静态库,而在动态链接库中还可以包含其他的动态和静态链接库。
  3. 动态链接库与静态链接库使用的不同之处在于它允许可执行模块.dll和.exe文件仅包含在运行时定位dll函数的可执行代码所需要的信息。在静态链接库的使用之中,连接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。
  4. 射击到库函数更新时,使用静态链接库的文件必须要重新编译,但是使用动态链接库的文件则不必重新编译。

 (整理自程序员面试宝典)

查看进程中用到了哪些库:ldd命令 ;

LD_LIBRARY_PATH:可以改变程序运行时加载共享库的路径;

你可能感兴趣的:(操作系统)