并发:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生祥孙的,但在微观上是交替发生的。并行:指两个或多个事件在同一时刻发生。 *** 作系统的并发性:指计算机系统中“同时”地运行着多个程序,这些程序宏观上是同时运行的,在微观上是交替运行的。 *** 作系统和程序并发是一起诞生的。我们的计算机的CPU有单核的,双核的,四核的,八核的!单核CPU同一时刻只能运行一个程序,各个程序只能并发地执行(交替地使用CPU)!多核CPU同一时刻可以执行多个程序,多个程序可以并行地执行(同时发生运行)。共享:即资源共享,是指系统中的资源可供内存中多个并发执行的进程中同时使用。所谓“同时”,往往是宏观上的,而在微观上,这些进程可能是交替地对资源进行访问的(即分时共享)。两种资源共享方式:互斥共享方式和同时共享方式。互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。同时共享方式:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。并发性和共享性互为存在条件的。虚拟:是指一个物理上的实体变为若干个逻辑上的对应物,物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。异步:在多道程序环境下,允许多个程序并发的谨尺链执行,但由于资源有限,进程的困宽执行不是一管到底的,而是走走停停已不可预知的速度向前推进,这就是进程的异步性!只有系统拥有并发性,才有可能导致异步性,没有并发和共享,就谈不上虚拟和异步。
*** 作系统(OperationSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便地接口和环境,它是计算机系统中最基本的系统软件。用户可以直接和 *** 作系统进行交互,但是大多数情况下都是通过应用软件与 *** 作系统进行交互。硬件指的是CPU、内存、硬盘等资源。
引入内联函数的目的是为了解决程序中函数调用的效率问题。 \x0d\x0a\x0d\x0a函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的伍悉困引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移 *** 作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。 \x0d\x0a\x0d\x0a在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。 \x0d\x0a\x0d\x0a内联函数的定义方法 \x0d\x0a\x0d\x0a定义内联函数的方法很简单,只要在函数定义的头前加上关键字inline即可。内联函数的定义方法与一般函数一样。如: \x0d\x0a\x0d\x0ainline int add_int (int x, int y, int z) \x0d\x0a{ \x0d\x0a\x0d\x0areturn x+y+z\x0d\x0a} \x0d\x0a\x0d\x0a在程序中,调用其函数时,该函数在编译时被替代,而不是像一般函数那样是在运行时被调用。 \x0d\x0a\x0d\x0a使用内联函数应注意的事项 \x0d\x0a\x0d\x0a内联函数具有一般函数的特性,它与一般函腔念数所不同之处公在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点: \x0d\x0a\x0d\x0a1.在内联函数内不允许用循环语句和开关语陆碰句。 \x0d\x0a\x0d\x0a2.内联函数的定义必须出现在内联函数第一次被调用之前。 \x0d\x0a\x0d\x0a3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。进程:可执行程序是存储在磁盘设备上的由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行。在Linux系统中,每个进程都有各自的生命周期。敏雀在一个进程的生命周期中,都有各自的运行环境以及所需的资源,这些信息都记录在各自的进程控制块中,以便系统对这些进程进行有效的管理,进程控制块的结构如下图所示:每个进程都有各自独立的虚拟地址空间,空间的大小与所基于的硬件体系结构有关。虚拟空间中各区代表的意义,代码段存储指令序列和只读数据,多个进程实例可共享代码段。数据段用来存放全局变量和静态变量。堆区域用于程序的动态内存管理,new或者malloc申请的内存就位于堆中。仔拿镇栈用来存放进程运行过程中的局部变量,函数返回地址,参数和进程上下文环境。
线程:引入进程是为了解决程序并发执行的问题,而引入线程是为了减少程念粗序并发所带来的时间和空间的开销,线程是比进程更小的单位,一个进程至少有一个线程,线程是 *** 作系统进行调度的基本单位,线程基本上不占用系统资源,线程与其他同属一个进程的线程共享该进程所占有的资源。
linux是个系统,支持各种服务,服务可以开启多进程,进程可以开启多线程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)