.Net牛人之路之基础篇_第1页
.Net牛人之路之基础篇_第2页
.Net牛人之路之基础篇_第3页
.Net牛人之路之基础篇_第4页
.Net牛人之路之基础篇_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

线程和进程在计算机科学中,“线程”和“进程”是两个相关的概念。二者都表示必须按特定顺序执行的指令序列。但是不同线程或进程中的指令可以并行执行。进程存在于操作系统内,并对应于用户可看作为程序或应用程序的事物。另一方面,线程存在于进程内。因此,线程有时也称作“轻量进程”。每个进程都由一个或多个线程组成。多个进程的存在使得计算机能够一次执行多个任务。而多个线程的存在使得进程能够分解工作以便并行执行。在多处理器计算机上,进程或线程可以在不同的处理器中运行。这使得真正的并行处理成为可能。并不总是能够完全并行处理。有时候必须要同步线程。一个线程可能必须等待另一个线程的结果,或者一个线程可能需要独占访问另一个线程正在使用的资源。同步问题是多线程应用程序中出现 Bug 的一个常见原因。有时候线程可能最终等待的是永远不会变得可用的资源。这导致了一种称为“死锁”的状况描述线程与进程的区别? 我对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程序的一部分。线程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂的过程。所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了线程(thread)的概念。 进程的作用和定义:进程是为了提高CPU的执行效率,减少因为程序等待带来的CPU空转以及其他计算机软硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程序的一次执行过程和为其分配资源的一个基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。线程和进程的区别: 1、线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。 2、一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。 3、系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。 4、与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。 5、进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。 进程与程序的区别: 程序是一组指令的集合,它是静态的实体,没有执行的含义。而进程是一个动态的实体,有自己的生命周期。一般说来,一个进程肯定与一个程序相对应,并且只有一个,但是一个程序可以有多个进程,或者一个进程都没有。除此之外,进程还有并发性和交往性。简单地说,进程是程序的一部分,程序运行的时候会产生进程。总结: 线程是进程的一部分,进程是程序的一部分1. 什么是Windows服务? Windows Service 是一种可随 Windows 操作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序。 Windows 服务由三部分组成: 1.一个服务可执行文件; 2.一个服务控制程序(SCP); 3.服务控制管理器(SCM), 服务安装程序会负责在 HKLMSYSTEMCurrentControlSetServices 下创建服务键值。 用户可通过 SCP 控制服务的启动、停止、暂停等,SCP 会通过 SCM 调用服务程序。2.Window 标准的exe可执程序 Window 标准的exe可执行程序通常有一个用户界面,Console或GUI,它可能帮用户完成一定的功能,通常由用户来启动或停止。3. 两者间有什么不同?(a)与用户的交互 Windows 服务是运行在windows后台的一种程序,它没有标准的UI界面,不会与用户进行直截交互。 标准的EXE可执行程序一般都有一个标准的UI界面,可与用户进行直截交互。(b)运行的用户不同 Windows 服务一般是运行在windows后台指定用户下(默认System)。 标准的EXE一般 是运行在当前登录的用户下,会随着用户的注销而终止。(c)运行方式不同 windows服务在“自动”方式下将随OS启动后自动启动运行,当然处于“手动”或“禁用”状态是另当别论。 标准的EXE程序需要用户登录后去主动运行。(当然也可以通过借助系统的功能实现登录后自动运行)(d)生命周期不同 windows服务启动后,如不主动去停止,它会一直运行,直到系统关闭。(用户的登录/注销对服务没有引响) 标准的EXE程序在当前登录用户注销时会随着用户的注销而终止。1.Windows上的单个进程所能访问的最大内存量是多少?注:理论上32位处理器是可以使用4G内存,但是实际上要分配一半到系统内核去,所以.实际上只有2G Windows使用一个系统:虚拟寻址系统。该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全有Windows后台管理,其实际结果是32位处理器上的每个进程都可以使用4GB的内存-无论计算机上有多少硬盘空间(在64位处理器上这个数值会更大)。这个4GB内存实际上 包含了程序的所有部分-包括可执行代码,代码加载的所有dll,以及程序运行时使用的所有变量的内容。这个4GB内存称为虚拟地址空间,或虚拟内存。2.它与系统的最大虚拟内存一样吗? 32位的操作系统的进程可访问的最大内存量是4G,而一个进程可访问的最大内存量也是4G。 进程内存访问量在物理内存大于等于4G的时候跟虚拟内存无关,而当物理内存小于4G时,进程访问的内存量随着虚拟内存的增加而增加,直到4G。3.这对于系统设计有什么影响? 当进程需要使用的内存数大于系统现有可用的物理内存数时,操作系统会根据策略将一些不常用的内存块对换到硬盘,而将空出来的物理内存分配给进程进行使用。而机械结构的硬盘与内存在访问数据的速度上有着非常与大的差距,会导致程序运行性能大幅下限EXE和DLL之间的区别是什么?EXE就是可执行文件,你可要双击它, 它就可以运行,而DLL是一个动态链接库文件,就是说,它不可以自己运行,它是须要一个程序的其它功能运行的时候,它才能运行,打个比方,如果你的QQ要升级,那QQ里面有关升级的DLL文件它就会运行. EXE是带有程序入口(Main)的能被终端用户直接执行的应用程序,随着它的启动系统会产生一个相应的进程。DLL是动态链接库,不包含程序执行入口,不能被终端用户直接执行,本身需要附加到现有的进程中才可以运行。但两者都是基于PE格式,运行时由磁盘中的映像载入被调用者的内存或者共享空间中执行,包含程序的数据信息,只是EXE还包括程序的代码信息。DLL可被多个程序共用,而EXE则不行,只能单独执行。 现在的Windows中,exe 和 dll 都是基于PE格式,exe 是通常的可执行文件,包含数据和代码,而 dll 是动态链接文件,也有可能是纯资源文件,只包含数据,不含程序代码。dll 的目的之一就是提供能被许多不同的应用程序所使用的函数和资源。dll 中的函数和资源为软件开发提供了复用。它们是在运行时由磁盘物理映像载入被调用者的内存空间或共享内存空间执行。 什么是强类型,什么是弱类型?哪种更好些?为什么?弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C+ 是静态语言,也是弱类型语言;Perl and PHP 是动态语言,但也是弱类型语言。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。使用哪种语言还是要按需而定。编写简单小应用,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。 强类型是指使用内存中的数据时必须做类型转化,否则不能使用,弱类型不需要程序转化,运行时系统自动处理数据直接的类型。使用强类型的好处:支持智能输入提示、编译时检测出潜在的运行问题、接口中避免数据不一致问题,并且使用强类型可以加快程序的开发速率和程序的运行速度。PID是什么?在做系统的故障排除时如何使用它? PID = Process Identifier, 是一个全局唯一的用来标识进程的整数。在多任务系统中,可用来诊断系统中发生错误的进程。PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语。PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。PID一列代表了各进程的进程ID,也就是说,PID就是各进程的身份标识。=只要运行一程序,系统会自动分配一个标识!是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。只要没有成功运行其他程序,这个pid会继续分配给当前要运行的程序!如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个pid! 单个TCP/IP端口上能够侦听多少个进程? 可能只有一个。如果你需要创建另一个TCP/IP监听,你必须建立另一个不同的端口 什么是GAC?它解决了什么问题? 每一个CLR(Common Language Runtime)所在的计算机都有一个全局程序集缓存(Global Assembly Cache,GAC)。部署在GAC上的程序集必须有一个强名称。一种由.net framework sdk提供的名叫 Global Assembly Cache tool (Gacutil.exe)的开发工具,可以把程序集部署到GAC上。GAC存储专门指定的程序集以供计算机上多个应用程序共享。它也为我们提供了克服DLL地狱的问题。百度百科上的解释:GAC全称是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:WINDOWSMicrosoft.NETFrameworkv1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。 除了系统默认放置在GAC中的Assembly如System.Windows.Forms以外,我们也可以添加自己的Assembly: 1)创建一个strong-name的Assembly,例如ToolbarComponent.dll 2)运行gacutil -i ToolbarComponent.dll,把这个Assembly添加到GAC 3)在程序中动态装载: System.Reflection.Assembly ass=Assembly.Load(ToolbarComponent, Version=1.0.934.20434, Culture=neutral, PublicKeyToken=65f45658c8d4927f); MessageBox.Show(Is the assembly loaded from GAC? +ass.GlobalAssemblyCache); 在上面的程序中,ToolbarComponent就是从GAC装载而不是从程序的运行目录下的dll文件中装载,程序目录下不需要放置ToolbarComponent.dll程序也能正常运行。另外,Assembly.Load()中的参数可以通过gacutil -l查到。 另外,上面提到了GAC中的Assembly必须是strong-name的。创建strong-name的Assembly的步骤大致如下: a) 在命令行运行“sn -k keyPair.snk”创建一个密钥文件。这里的sn.exe也是.NET附带的一个工具。 b) 在VS.NET里面修改“AssemblyInfo.cs”文件: assembly: AssemblyDelaySign(false) assembly: AssemblyKeyFile(.keyPair.snk) c) 编译项目,就能得到一个strong

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论