从新文化原型结构制图和内存结构来分析,为什么需要同步

您所在的位置: &
Linux共享内存使用常见陷阱与分析(4)
Linux共享内存使用常见陷阱与分析(4)
所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。本文详细分析了常见的Linux共享内存陷阱,希望对大家有所帮助。
共享内存删除的陷阱?
当进程结束使用共享内存区时,要通过函数 shmdt 断开与共享内存区的连接。该函数声明在 sys/shm.h 中,其原型如下:
#include&#include&int&shmdt(const&void&*shmaddr);&
参数 shmaddr 是 shmat 函数的返回值。
进程脱离共享内存区后,数据结构 shmid_ds 中的 shm_nattch 就会减 1 。但是共享段内存依然存在,只有 shm_attch 为 0 后,即没有任何进程再使用该共享内存区,共享内存区才在内核中被删除。一般来说,当一个进程终止时,它所附加的共享内存区都会自动脱离。
我们通过:
int&shmctl(&int&shmid&,&int&cmd&,&struct&shmid_ds&*buf&);&
来删除已经存在的共享内存。
第一个参数,shmid,是由shmget所返回的标记符。
第二个参数,cmd,是要执行的动作。他可以有三个值:
IPC_STAT 设置shmid_ds结构中的数据反射与共享内存相关联的值。
IPC_SET 如果进程有相应的权限,将与共享内存相关联的值设置为shmid_ds数据结构中所提供的值。
IPC_RMID 删除共享内存段。
第三个参数,buf,是一个指向包含共享内存模式与权限的结构的指针,删除的时候可以默认为0。
如果共享内存已经与所有访问它的进程断开了连接,则调用IPC_RMID子命令后,系统将立即删除共享内存的标识符,并删除该共享内存区,以及所有相关的数据结构;
如果仍有别的进程与该共享内存保持连接,则调用IPC_RMID子命令后,该共享内存并不会被立即从系统中删除,而是被设置为IPC_PRIVATE状态,并被标记为&已被删除&(使用ipcs命令可以看到dest字段);直到已有连接全部断开,该共享内存才会最终从系统中消失。
需要说明的是:一旦通过shmctl对共享内存进行了删除操作,则该共享内存将不能再接受任何新的连接,即使它依然存在于系统中!所以,可以确知, 在对共享内存删除之后不可能再有新的连接,则执行删除操作是安全的;否则,在删除操作之后如仍有新的连接发生,则这些连接都将可能失败!
Shmdt和shmctl的区别:
Shmdt 是将共享内存从进程空间detach出来,使进程中的shmid无效化,不可以使用。但是保留空间。
而shmctl(sid,IPC_RMID,0)则是删除共享内存,彻底不可用,释放空间。
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
内容导航&第 1 页: &第 2 页: &第 3 页: &第 4 页:
关于&&的更多文章
内核是操作系统的核心,它控制着硬件和应用。应用并不直接和硬件
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
Ubuntu是目前最受欢迎的Linux发行版,不仅是免费的操
秋风呼呼的,一阵阵地吹着,树叶纷纷沉落,漫天飞舞着
Linux命令行吸引了大多数Linux爱好者。一个正常的Linu
本书是一本优秀的C++教材,内容包括:基础类型、操作符和简单变量,循环和决策,命名空间和C++标准库,用C++编写函数,行为、序
51CTO旗下网站javascript(11)
在JavaScript中,每一个函数都有一个prototype(原型)属性,该属性是一个对象,它的作用是使特定类型的所有对象实例可以共享它所包含的属性和方法。
原型是JavaScript中非常特殊的一个对象,当一个函数创建之后,会随之产生一个原型对象,当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中,就会有一个属性指向原型。
下面的代码演示了通过原型创建JavaScript对象的方式。使用基于原型的创建可以将属性和方法设置为对象Person专有的的属性和方法,它们不能再通过window来调用,因此满足了对象的封装性的要求。
Person(){};
Person.prototype.name = &Leon&;
Person.prototype.age = 22;
Person.prototype.say = fucntion(){
&&alert(this.name +
+ this.age);
p1.say();&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&原型的内存模型分析
在使用原型方法创建类的过程中,原型在内存中会有4种不同的状态。我们仍然以上面创建Person类的例子来分析原型的内存模型。代码如下:
Person(){};
Person.prototype.name = &Leon&;
Person.prototype.age = 22;
Person.prototype.say = fucntion(){
&&alert(this.name +
+ this.age);
p2.name = &Ada&;
p2.say();&&&&&&&&&&&&&&&&&&&&&&&&&&&&
首先,我们通过function Person(){};来创建了一个Person函数,此时Person函数的原型内存模型如下图所示:
Person(){};&
在内存中会为Person函数分配一块空间,在这个空间中有一个prototype属性,另外还会为该函数创建一个原型对象,在原型对象中有一个constructor属性。Person函数和它的原型对象的关系如图中所示。我们称这时的内存模型为原型的第一种状态。
接着我们通过原型为Person函数设置属性和方法,这是原型内存模型的第二种状态。
Person.prototype.name = &Leon&;
Person.prototype.age = 22;
Person.prototype.say = fucntion(){
&&alert(this.name +
+ this.age);
}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
添加上面的代码后,原型的内存模型结构如下图所示:
此时,通过原型添加的方法和属性都被存储在原型的内存空间中。
接下来,我们完成Person类的创建之后,就可以通过new关键字来创建Person对象,这是原型内存模型的第三种状态。
p1.say();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
原型内存模型的第三种状态如下图所示:
我们通过new Person()创建了一个Person对象p1,此时会在内存中为p1对象分配一块内存空间,在p1的内存空间中会有一个_proto_内部属性,这个内部属性是不能被访问的,它也指向Person原型。
虽然_proto_内部属性是隐藏的,但是我们可以通过Person.prototype.isPrototypeOf(p1)方法来检测出p1是否有_proto_指向Person的原型。
(Person.prototype.isPrototypeOf(p1));&&
在完成p1对象的创建之后,通过p1对象调用了say()方法。此时,在p1对象的内存空间中是没有say()方法的。当在p1的内存空间中找不到say()方法的时候,JavaScript会通过_proto_属性到Preson的原型中去查找,找到之后就会执行相应的say()方法。
除了上面的三种状态之外,原型的内存模型还有第四种状态。
如果我们再创建一个Person对象p2,并且将p2对象的name属性修改为“Ada”,此时就会出现原型内存模型的第四种状态。
p2.name = &Ada&;
p2.say();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
调用上面的代码之后的原型内存模型如下图所示:
当创建对象p2的时候,同样会在内存中为它分配空间,在p2对象的空间中也会有一个_proto_内部属性指向Person的原型。
当我们通过p2.name = &Ada&;为对象p2的name属性赋值的时候,JavaScript会在p2的内存空间中设置自己的name属性,并将值设置为“Ada”。
接着我们调用了say()方法,该方法中需要获取p2的name属性,它首先会在p2对象自己的内存空间中查找是不是有name属性,如果找到了,就不会再去Person原型中取查找了。显然此时在p2对象的空间中存在一个name属性,所以调用say()方法打印出来的名字是“Ada”,而不是“Leon”。
需要特别注意的是:原型中的值是不会被替换的,仅仅只是在属性查找时被对象自己空间中的同名属性所覆盖。
以上就是原型内存模型的4种状态,理解这4种状态是掌握原型的关键所在。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:261407次
积分:3780
积分:3780
排名:第8458名
原创:96篇
转载:149篇
评论:37条
(1)(6)(1)(1)(3)(6)(12)(1)(6)(1)(3)(1)(3)(6)(1)(2)(5)(7)(3)(2)(3)(2)(7)(1)(7)(4)(1)(1)(6)(2)(1)(6)(4)(2)(1)(1)(2)(1)(10)(5)(6)(4)(4)(3)(5)(2)(2)(6)(7)(7)(11)(9)(1)(3)(18)(1)(2)(2)(1)(1)(4)(6)(2)(2)Web前端教程javaScript高级0216-数据的内存结构-精细化原型链结构-3 - 在线观看 - 热点 - 乐视视频
& Web前端教程javaScript高级0216-数据的内存结构-精细化原..
缓存至手机
我们对您的信息保密并不收取任何费用
转存到云盘
方式B免费发短信到手机
我们对您的信息保密并不收取任何费用
方式C下载APP到本机
-->英雄,快来抢沙发!加载中...英雄,快来抢沙发!
推荐原创人
乐视集团旗下网站
乐视网频道
乐视网旗下产品
违法和不良信息举报电话:
Copyright &
乐视视频(le.com)All rights reserved.扫描进入链接
惠普推超强处理能力的电脑原型机 内存高达160TB
13:31:15来源:智能电子集成
[摘要] 惠普企业(Hewlett Packard Enterprises)推出了一款单一内存高达160TB的电脑原型机。这是全世界单一内存最大的电脑。这种电脑叫做The Machine,运行基于Linux的操作系统,具有强大的处理能力和超大的内存。
  近日,惠普企业(Hewlett Packard Enterprises)推出了一款单一内存高达160TB的电脑原型机。这是全世界单一内存最大的电脑。  这种电脑的设计目的就是为了处理。它可以同时分析相当于1.6亿本图书的信息量。  这种电脑叫做The Machine,运行基于Linux的操作系统,具有强大的处理能力和超大的内存。  惠普企业称,它的&内存驱动计算&(Memory Driven CompuTIng)研究项目最终可能会开发出&接近无限的&内存容量。  &下一个伟大的科学突破、变革行业的创新或改变生活的科技,将会出现在我们每天产生的海量数据中。&惠普企业老板梅格-惠特曼(Meg Whitman)说,&要实现这个目标,我们就不能依赖于过去的技术,而需要打造适应大数据时代的电脑。&  南安普顿大学的教授雷斯-卡尔(Les Carr)称,The Machine的速度可能非常快。但是,大数据还面临着其他挑战。  &加快速度的最终办法就是确保你电脑中的所有数据尽可能快地进入处理过程。&他说,&但是,我们不仅要让我们的处理过程变得更快,而且要让它变得更富有洞察力,与业务更相关。现在,生活中有很多领域并不是越快越好。&
[责任编辑:董义华]
《安防知识网》一个服务号 二个订阅号 微信服务全面升级
转载声明:凡文章来源标明"安防知识网"的文章版权均为本站所有,请不要一声不吭地来拿走,转载请注明出处,违者本网保留追究相关法律责任的权利;所有未标明来源为"安防知识网"的转载文章均不代表本网立场及观点,"安防知识网"不对这些第三方内容或链接做出任何保证或承担任何责任。
随着物联网、社交网络等新的互联网技术的发展,在为人们带来便利的同时,也产生了大量的、结构化的非格式化的数据。如何通过数据挖掘,从海量数据中获得有用的信息,为用户提供好的用户体验,增强企业的竞争力,这对企业来说是一个挑战。
LTC3895 是一款非隔离式同步降压型开关稳压器控制器,驱动全 N 沟道 MOSFET 电源级。其 4V 至 140V (绝对最大值为 150V) 输入电压范围允许用高压输入电源或者用具有高压浪涌的输入电源运行,因此无需外部浪涌抑制器件。LTC3895 在输入电压降至 4V 时,以高达 100% 的占空比连续运行,从而非常适合汽车以及重型设备应用。
  保罗·雅各布:首先,我想祝贺杨杰董事长及中国电信团队,你们再次成功举办了一届非常出色的盛会。我也很高兴看到今年的峰会聚焦于整个生态系统,因为我们看到了行业中的一个巨大变化——我们现在更多关注于生态系统,而不是仅仅看到终端本身。此前我也参加过多次由中国电信和Qualcomm联合举办的大会,Qualcomm和中国电信有着悠长的合作历史和非常良好的合作关系。我们的合作始于3G CDMA技术,后来又延伸到4G LTE 、4G+以及全网通技术之上。
注册会员免费申请杂志及下载本站所有案例调研报告
智能锁潜力市场规模>1.1万亿,而实际上我国的普及率仍非常低,2016年智能锁出货量才2百多万把;预计2017年也就100亿规模。而在技术上,智能锁又有哪些变化?本文将对市场和技术进行深度剖析。
门禁出入口控制这个产业更多的改变体现在联网后的应用模式上...
人工智能如同IT技术一样,势必会影响着各行各业,如果仅仅站...
根据Marketandmarkets最新市场调查报告显示,2016年出入口管...
本周最受欢迎排行榜
资讯产品技术方案
安防知识网服务号
深度报道产品、提供解决方案
专家解读技术、最新行业资讯
举办线上线下活动/研讨会
下次自动登录比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
浅析软件需求分析方法之原型法
关键字:需求分析
  软件开发中最为困难的是要准确知道应该要开发些什么,即软件需求分析(Software Requirement Analysis)。因为一旦最初的需求做错了,不但会给系统功能带来极大的损害,而且不断的修改也会浪费资源、增加成本。有数据显示,软件项目中返工开销几乎占了总开发的一半,而导致返工的主要原因就是需求分析不明确。因此,一个软件开发项目想要成功的关键就是要做好需求分析。
  软件需求分析是一个项目的开端,也是项目最重要的关键点。它是研究用户想要得到的东西,完全理解用户对软件需求的完整功能,确认用户软件功能需求,并建立可确认的、可验证的一个基本依据。有调查报告显示,软件产品存在的不完整性、不正确性等问题,80%以上是由于需求分析错误所导致的。所以,一个成功的需求分析是软件项目能否成功的关键一步。然而,对于规模较大或结构较复杂的系统,在系统开发前期,用户往往对未来的新系统仅有一个比较模糊的想法。由于专业知识所限,系统开发人员对某些涉及具体领域的功能需求也不太清楚。虽然可以通过详细的系统分析和定义得到一份较好的规格说明书,却很难做到将整个管理信息系统描述完整,且与实际环境完全相符,很难通过逻辑推断看出新系统的运行效果。因此在新系统建成以后,用户对系统的功能或运行效果往往会觉得不满意。同时随着开发工作的进行,用户会产生新的要求或因环境变化希望系统也能随之作相应更改,系统开发人员也可能因碰到某些意料之外的问题希望在用户需求中有所权衡。原型方法(Prototyping)正是对上述问题进行变通的一种新的系统开发方法。
  一.原型法的基本思想及策略
  1.1 原型法的基本思想
  原型法凭借着系统分析人员对用户要求的理解,在强有力的软件环境支持下,快速地给出一个实实在在的模型(或称原型、雏形),然后与用户反复协商修改,最终形成实际系统。这个模型大致体现了系统分析人员对用户当前要求的理解和用户想要希望实现后的形式。
  1.2 原型定义的策略
  原型方法以一种与严格定义法截然不同的观点看待需求定义问题。原型化的需求定义过程是一个开发人员与用户通力合作的反复过程。从一个能满足用户基本需求的原型系统开始,允许用户在开发过程中提出更好的要求,根据用户的要求不断地对系统进行完善,它实质上是一种迭代的循环型的开发方式,如图所示。
  二.原型法的特点及优缺点
  2.1 原型法的特点
  原型法的特点简要概括为:直观性、动态性、渐进明细性、严谨性。
  原型法是一种循环往复、螺旋式上升的工作方法,它更多地遵循了人们认识事物的规律,因而更容易被人们掌握和接受。原型法强调用户的参与,特别是对模型的描述和系统需求的检验。它强调了用户的主导作用,通过开发人员与用户之间的相互作用,使用户的要求得到较好的满足。这样不但能及时沟通双方的想法,缩短用户和开发人员的距离,而且能更及时、准确的反馈信息,使潜在问题能尽早发现并及时解决,增加了系统的可靠性和适用性。
  原型法是将系统调查、系统分析和系统设计合而为一,使用户一开始就能看到系统开发后是一个什么样子。而且用户参与了系统全过程的开发,知道哪些是有问题的,哪些是错误的,哪些需要改进等,就能消除用户的担心,并提高了用户参与开发的积极性。同时,用户由于参与了开发的过程将有利于系统的移交、运行和维护。
  2.2 原型法的优缺点
  原型法贯彻的是"从下到上"的开发策略,它更易被用户接受。
  (1)它是一种支持用户的方法,使得用户在系统生存周期的设计阶段起到积极的作用
  (2)它能减少系统开发的风险,特别是在大型项目的开发中,由于对项目需求的分析难以一次完成,应用原型法效果更为明显
  (3)原型法的概念既适用于系统的重新开发,也适用于对系统的修改
  (4)原型法可以与传统的生命周期方法相结合使用,这样会扩大用户参与需求分析、初步设计及详细设计等阶段的活动,加深对系统的理解
  三.使用原型法进行需求分析的流程
  (1)快速分析,弄清用户的基本信息需求
  需求分析原型法的第一步是在需求分析人员和用户的紧密配合下,快速确定软件系统的基本要求。也就是把原型所要体现的特性(界面形式、处理功能、总体结构、模拟性能等)描述出一个基本的规格说明。快速分析的关键是要选取核心需求来描述,先放弃一些次要的功能和性能。尽量围绕原型目标,集中力量确定核心需求说明,从而能尽快开始构造原型。
  这个步骤的目标是要写出一份简明的骨架式说明性报告,能反映出用户需求的基本看法和要求。在该步骤中,用户的责任是先根据系统的输出来清晰地描述自己的基本需要,然后分析人员和用户共同定义基本的需求信息,讨论和确定初始需求的可用性。
  (2)构造原型,开发初始原型系统
  在快速分析的基础上,根据基本规格说明应尽快实现一个可运行的系统。原型系统可先考虑原型系统应必备的待评价特性,暂时忽略一切次要的内容。例如安全性、健壮性、异常处理等。如果这时为了追求完整而把原型做得太大的话,一是需要的时间太多,二是会增加后期的修改工作量。因此,提交一个好的初始原型需要根据系统的规模、复杂性和完整程度的不同而不同。
  本步骤的目标是建立一个满足用户的基本需求并能运行的交互式应用系统。在这一步骤中用户没有责任,主要由开发人员去负责建立一个初始原型。
  (3)用户和开发人员共同评价原型
  此阶段是双方沟通最为频繁的阶段,也是发现问题和消除误解的重要阶段。其目的是验证原型的正确程度,进而开发新的原型并修改原有的需求。由于原型忽略了许多内容和细节,虽然它集中反映了许多必备的特性,但外观看起来还是可能会有些残缺不全。因此,用户可在开发人员的指导下试用原型,在试用的过程中考核和评价原型的特性,也可分析其运行结果是否满足规格说明的要求,和是否满足用户的愿望。并可纠正过去沟通交流时的误解和需求分析中的错误,增补新的要求,或提出全面的修改意见。
  四.采用原型方法时需要注意的几个问题
  (1)并非所有的需求都能在系统开发前被准确地说明
  (2)项目参加者之间通常都存在交流上的困难,原型提供了克服该困难的一个手段
  (3)需要实际的、可供用户参与的系统模型
  (4)有合适的系统开发环境
  (5)反复是完全需要和值得提倡的,但需求一旦确定,就应遵从严格的方法
  五.结束语
  原型方法是可视化的方法,已成为快速软件开发常用的手段。总的来说,原型法是通过强化用户参与系统开发的过程,让用户获得系统的亲身体验,找出隐含的需求分析错误。原型需求分析法是鼓励改进和创造,通过不断交流来提高需求实现的质量和软件产品的质量,目的是为了更好的提高客户满意度。
[ 责任编辑:邹秋萍 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte}

我要回帖

更多关于 新文化原型结构制图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信