精华内容
下载资源
问答
  • 采用溶胶-凝胶法制备了助剂Cr 改性的Ni /MgO催化剂, 用化学气相沉积( CVD) 法在600 ℃下裂解甲烷生长碳纳米, 研究了助剂Cr 的引入对催化剂微结构和制备碳纳米性能的影响. 催化剂样品用XRD,TPR和CO-TPD进行了分析...
  • 在组织行为研究的基础上,应用团队冲突理论,研究TMT冲突对创新绩效的影响,同时引入环境不确定性为调节变量。通过对76家科技型企业276份有效问卷的实证研究表明:TMT情感冲突与企业创新绩效负相关,且环境不确定性削弱了...
  • 很多人都建议jquery使用cdn加速的方式引入。当然,我不反对这么做。但是以我自己做项目的便利性,我还是习惯把jq放在本地使用。原因有以下几点: 项目的可靠性。不会受外在的情况的影响。 在断网的情况下依旧可以...

    很多人都建议jquery使用cdn加速的方式引入。当然,我不反对这么做。但是以我自己做项目的便利性,我还是习惯把jq放在本地使用。原因有以下几点:

    1. 项目的可靠性。不会受外在的情况的影响。
    2. 在断网的情况下依旧可以工作。(我这个随时随地写代码的人哪)。

    好,jq本地引入有什么问题?

    1. JQ2不兼容IE低版本,所以,针对IE低版本,要使用JQ1.11版
    2. 同时引入html5.js,以让低版本IE支持HTML5标记

    为了实现这样的效果,我们需要写如下代码:

    <!--[if IE]>
        <script src='js/jquery/jquery-1.11.3.min.js'></script>
        <script src='js/jquery/html5.js'></script>
    <![endif]-->
    <!--[if !IE]><!-->
        <script src="js/jquery/jquery-2.1.4.min.js"></script>
    <!--<![endif]-->

    好,如上。

    IE以后不会有新版本了,所以我简单粗暴的分为IE和非IE。如果愣是要区别IE自身的版本的话,代码就太冗长了。

    但是这个代码还是比较冗长的。我个人不是很喜欢。怎么办呢?

    我想到一个解决方法。就是在同目录下建立一个jquery.js的文件,然后,在这个文件中写上如下代码:

    document.writeln("<!--[if IE]><script src=\"js/jquery/jquery-1.11.3.min.js\"></script><script src=\"js/jquery/html5.js\"></script><![endif]-->")
    document.writeln("<!--[if !IE]><!--><script src=\"js/jquery/jquery-2.1.4.min.js\"></script><!--<![endif]-->");

    使用这种方式之后,在html中确实精简太多啦。我们只需要这样调用就可以了。

    <script src="js/jquery/jquery.js"></script>

    相比上面的一坨代码,确实是非常理想。但是,问题还是存在的。什么问题呢?就是在这个项目中是没有问题的,在其他的项目中,可能就有问题了。

    因为其他的项目的目录路径可能跟这个是完全不一样的。

    有什么办法可以解决呢?有思路:

    • 所有JS文件放在同一个目录下,至于这个目录在哪里是不知道的。
    • 因此,我们需要动态的获取这个js的目录并赋予变量,然后替换原来的路径就可以了

    思路如此简单,代码实现不一定简单。因为我的JS基础非常薄弱,只能写一些不太复杂的jquery。而这个一定是不能用jquery来写的,因为它的作用是引入jquery,所以必须要写原生。

    查找了一番资料,终于找到解决方法。代码如下:

    var js=document.scripts;
    js=js[js.length-1].src.substring(0,js[js.length-1].src.lastIndexOf("/")+1);
    document.writeln("<!--[if IE]><script src='"+js+"jquery-1.11.3.min.js'></script><script src='"+js+"html5.js'></script><![endif]-->");
    document.writeln("<!--[if !IE]><!--><script src='"+js+"jquery-2.1.4.min.js'></script><!--<![endif]-->");

    其中

    var js=document.scripts;
    js=js[js.length-1].src.substring(0,js[js.length-1].src.lastIndexOf("/")+1);

    是百度来的,原文地址:http://www.cnblogs.com/MaxIE/archive/2007/11/09/936999.html

    虽然这段代码很乱,但是通过仔细研究之后,还是搞明白了。

    好了,用了这段代码之后,就一劳永逸的解决jquery引入问题啦,以后想用jquery,直接把这一坨给复制到相应目录,然后检点的调用一下jquery.js即可不用管啦!

    展开全文
  • 将时尚的互联网引入教学中来

    千次阅读 2011-12-19 18:04:07
    而如果高校教师在发展迅猛的互联网面前也不能先迈开一步的话,互联网在高等学校无法发挥正面作用,也就不足为奇了。因而,高校教师必须在这方面有所作为,主动了解这些应用,学会使用这些应用,并在教学设计中,将...
      在目前高校的教学工作中,有些同学迷恋网络,以致于影响了学习成绩。很多人将此归罪于网络,甚至有些学校做出大一新生不准购买计算机等的规定。实际上,所谓这种负面的迷恋网络,是指学生将很大一部分的时间用在了打网络游戏、看视频、聊天、经营空间等各种以娱乐为主的应用上。适度参加一些这样的活动,对学生来说是有益的。但是,过度使用只能造成各种各样的杯具。而如果将网络用在好的地方,不可否认其威力无比。
      再细究原因,学生为什么在购买计算机和联网时,目标是要用之于好好学习,但有了很好的条件后却背道而驰了呢?是因为他们没有能力在学习中使用网络,这需要有人帮助他们具有这种能力。确实,将网络用于学习,要比打游戏等难上手一些。将学生挡在网络之外,不是办法,不能因噎废食。相反的是,我们这些当老师的,应该将学生吸引到网络之中来,在教学环节中,引导及要求学生利用好互联网完成学习任务,让他们通过体验,有能力驾驭这匹烈马,并在长远的职业发展中,不断从领导世界发展的IT技术中吸取营养。
      教师主动地要求学生利用互联网,是与社会发展相适应的做法,是充分利用先进生产力的表现。如果对此怀有拒绝的心态,大多是教师没有跟得上形势,没有在自己的工作中利用好互联网造成的。青少年网络成瘾的一大原因在于家长对网络不了解,无法引导孩子正确使用网络。而如果高校教师在发展迅猛的互联网面前也不能先迈开一步的话,互联网在高等学校无法发挥正面作用,也就不足为奇了。因而,高校教师必须在这方面有所作为,主动了解这些应用,学会使用这些应用,并在教学设计中,将使用这些应用作为教学手段改革的重要着手点,大胆地利用起来。
      年青学生的好奇心强,热衷于各种新奇的事物。他们对新事物接受的速度和对此投入的热情远超我们这些所谓的“前辈”。这是我们可以利用的最大的资本,也是在有些方面失去控制的根本原因。如果教师利用好这股强大的动力,就一定能够获得丰硕的成果,营造出学生积极参与的良好局面。在教学中引入这些很潮的东西,学生会紧紧跟随,学习主动性大为增强,进而这些年青人也会向老师提出更炫的想法,将学习过程变得更加生动多彩。这不正是我们追求的教学氛围吗?
      将网络应用到教学中的手段包括(仅我写作时随意想到的):下载学习资料、登录论坛交流、利用数字图书馆、在线观看教学视频(如很火的网易公开课)、利用文档共享工具(如GoogleDoc)合作完成任务等。
      在本文中,先将我在下学期即将要试点的两个想法进行阐述,同时也帮助我理清工作的思路。两个想法主要在C++程序设计课程中使用,在试点基础上,我将进一步总结向其他课程中推广的手段。这两个想法分别是:(1)利用博客交作业;(2)利用微博进行答疑。看了此文有想法的老师(无论在何处),可以和我一起交流,探讨并实践这些想法,对此感兴趣的学生(无论何校,学习哪门课程),也可以参与进来。
      
    用博客交作业
      想法起源于我关注了我的几位学生的博客。他们是学习很主动、积极的同学,经常将自己课外学习的体会、成果放到博客上去,甚至有时放的就是某课程的作业或实验报告。从这些博文中,我看出了他们的成就感,看出了学习的快乐,看出了他们的自信,看出了他们不断陷入各种迷惘而又胜利突围的过程,也看到了他们学有所成的未来。于是我想到,为什么不引导我的学生都找到这种感觉呢?参与的人越多,我们这个群体的成就将会呈指数级增长。
      我开博已经有六年时间,真正将自己的博客定位于关注理想教育和美好生活,坚持写原创博文也已经有三年的时间。对写博的意义已经有了很深的感受。C++课程的第一次实验,我将指导学生建自己的博客,自豪地向全世界宣布“我来了”,将自己写的第一个程序写成博文。
      先给出用博客交作业的理由:
      (1)帮助学生驶入利用网络学习的“正”道:写过博文,就会经常惦记着往上加点东西,这是很有成就感的事。但万事开头难,于是有很多博主只成天转载别人的文章,没有原创。我将要求学生(必须)每周将实验报告发布为博文,我对实验的评分将以博文为依据;建议学生将课程的其他作业,尤其是调试过的程序也写晒到博客上,也许可以用加分作为诱饵。学生的原创博文就这样出炉了,并且每周至少一篇。以我的经历,一旦开写,一发而不可收拾。逐渐地,上论坛、看公开课,都是自然而然的了。会走正道,“歪”道就会少走,甚至不走了。
      (2)减轻学生和和教师的负担:我将设计一个实验报告模板,实验报告中大家全一样的文字学生不用再写,只将编好的程序、运行结果及总结写入,当堂完成并提交。我也会制作一个学生博客的清单,只要在课后一个个地打开、登记即可。如果需要点评一下,有“评论”呢,用博客干这个很得手。不出意外,我将抢占不少“沙发”。
      (3)避免抄袭:有人会问,往博客上一发,全世界都知道了,这不是更利于抄袭吗?似乎是这样的。实际上,防止抄袭是个世界性难题,又防又堵,不见得有效。换个角度想,抄袭是防不住的,但如果资源充足,由原先不方便看,偷偷摸摸地抄,变为让学生很方便地多看“几家”,比一比,想一想,也能改改成了自己的。由一贯的偷着抄,到合情合理地借鉴着抄,是个进步,其实这也是一种学习的正常方式。写到这儿,我想到了开源软件,其核心就是“不怕抄”和“坦然面对抄”。再者,每个人都有个脸面的问题,在博客中抄作业,让全世界都看到(起码全班同学都能看到),总是不愿意的。管着不让抄他要抄,放开了倒不一定这样了。至少我想碰碰这个运气。(这儿还有些想法,见后文。)
      (4)避免学生拖延:学生必须当堂调试并完成题目,实验课结束之后,最多拖延几小时后,我就会批改,哪用课代表一摧二摧也收不起来。人性化些的做法,实在交晚了,学生要单独打招呼请老师补批。目前学生与老师交流少,更大的原因是学生不会主动找老师(有人讲有考试完主动找老师的,我多年没有遇到过了,但更愿意学生在学习过程中主动找我。其中原因很复杂,但总得找个办法突破),这不就创造条件让学生体验主动找老师的感觉了吗?老找老师总不好意思,除了人人不可避免的客观原因,学生将尽力按时完成。于是,老师们成天强调的实验课前一定要做好准备,但总有人去了实验室才想要做什么事情的局面会有所改善。可以给每个学生只3次(或5次)的宽恕机会,总拖延是不对的,那扣分没商量。在这个过程中,还可以及时发现学习困难的学生,从而有了重点帮扶的对象。这又是传统教学方式中的一个难题。
      (5)增加交流与讨论:以博客为代表的Web2.0擅长的就是交流。作业放在博客上了,人人可以评论几句。对每个同学而言,都能得到更多人的指点,也能得到更多指点人的机会。不是说现在的学生们不爱交流吗?上网写点这些评语他们还是愿意的。如果这个群体干的事情能够引起高年级或外界高手的注意,不时来点拨一下那就更得益了。条件成熟时,我可以开发一个应用,统计每名同学在班级其他同学的作业博文中的留言,小小的个位数加分,将激起同学更多的热情。
      (6)学生的热情投入:人做一件事情难得的是兴趣。看多了太多的学生声称对专业不感兴趣,实则是在专业入门之时就难以投入。不管是出于老师施加的要求,还是在用时尚的工具玩学习的驱使,我在等着看热火朝天的局面。我不敢期望百分之百的学生,起码要高出现在传统方式很多比例的同学,专业学习热情会由此点燃。一旦学生入手做这件事情,除了我布置的题目,他们会利用这个平台表达、思考、沟通,找到互联网中更多的奇珍异宝,并从中收获。我将设计几个等级的作业,学生完成课程的基本要求之余,将会不为成绩,只为心中的梦想和那么一点点光荣的成就感,将进阶题目不断地做下去,发出来。
      这种方式存在的障碍(或负面影响)和应对办法:
      (1)学生抄袭:抄袭是这个方式最大的隐患。与其挡不住,不如提供更好的条件方便学生抄。但抄一定是不对的,会面临风险。老贺也定将与广大同学一起,与此不良风气展开坚决斗争。一经发现抄袭,除留言向全世界曝光之外,记零分甚至记负分是必不可少的。相信老贺有这样的狠心做这种狠事。也要组织好学习小组,帮助学习确实困难者不抄就可以完成任务(我相信抄袭最根本的原因是学生真的不会)。另外,咱是有技术背景的,现在我已经勾勒出来了针对用博客交作业这一应用的抄袭判定软件的基本需求和解决方案,无论直接用搜索引擎和文本处理技术,还是用博客提供的API接口,找出近似度高的作业版本,都是不难解决的。每次的博客作业总结中,可以出一份相似度判定清单,常居上之人,即使不受惩罚,也应该就不好意思了。这个应用有时间我自己做,或找高年级的学生做,都可以。除了在作业中搜索相同或相近版本,甚至可以开发出专门的应用,方便学生找不同版本进行参考,还鼓励学生多看几家了。可以将这个应用作为案例讲给学生,有了这种就在身边有实在体会的案例,学生将对搜索引擎和文本处理这两个热门领域了解一二,知道学计算机的人可以干这个事情。
      (2)学生需要有额外的经费支出。发博客得上外网,且学生的第一个博客我一定要让他选择最好的、影响最大的平台,那一定是外网了。所以学生必须每个月都花5元钱购买外网的使用费。和其他花费相比,这个数额不大,但有些同学在意,可以两三人共用一个帐号。我非常愿意看到学生们都有校园网出外网的帐号,上网上机都到计算中心。计算中心最便宜,有些机房的机器是有些旧,但作为学习来讲足够用了,唯一的缺点是打游戏的条件和氛围不是一般的差。前些天媒体曝光学校内有通宵打游戏的机房,学校很尴尬,同学很受害,我推荐同学上机就到计算中心。包月的上外网帐号可能会成为到计算中心上机的一个理由。
      (3)在这种模式下,现有的参考和指导材料缺乏。这没有什么,我将与我的学生并肩作战,一起建设。
      用博客交作业的方式即将开始试点,我也将面对新的挑战。这种方式可能并不适合所有课程。我非常害怕我的学生用这种方式衡量所有的课程及其他的老师。其实适合的才是最好的,这是一个基本观点。例如高等数学课,用作业本手写的方式应该是最好的。英语课的作文可能适合这种方式,如果上机方便的话。大部分的计算机软件类课程可能适合用这种方式。C++程序设计课程中使用这种方式最得天独厚的条件是有大量的上机时间,每一道作业只有上机调试后才算是结束,以此发博文只是顺手而为。
      
    用微博答疑
      我玩微博有半年多的时间了。微博很好玩,我只关注我感兴趣的人,从来不为增加粉丝数量而与人互粉,于是我在平时看到的微博文中,只是我的学生的发言,以及热心教育事业的几位博友的动态。周六乘车,看了李开复的新作《微博改变一切》,得到了对微博更全面的认识。我突然意识到,可以将我的学生引入微博的世界中来,将他们引入与合适的人交流、交流合适的话题的世界中来。学生需要走入这种时尚的,将改变一切的世界的应用中来,他们一定也会为自己及时跟上“潮”流而自豪。
      借助微博,我在教学中可以做些什么?答疑。现实中的答疑问题不少:时间不好统一,定好的时间老师去了,学生没有;对老师车轮战,老师顾不过来,有的同学没有机会;有了问题老师不在,见了老师忘了问题,或者没有了感觉。
      用微博答疑的好处在于:(1)随时可以将问题发出去;(2)能够得到除了老师之外的更多人的回答;(3)并非马上有人会回复和评论你的话题,这留下了更多的独立思考的机会;(4)大家(师生)可以在自己合适的时间处理这些事情;(5)有更多的学生可以参与到答疑中来,减轻老师的负担,增加同学锻练的机会,营造出学习型的组织;(6)140字的限制,利于提问者和答问者学会用有限的篇幅表达清楚,这种能力很重要;(7)字数限制,也有利于提问者和答问者的慎密思维。
      唯一想到的不利条件在于学生需要有很方便的上网条件。其实现在的大学生都有手机,手机上网的也占多数。发条微博几十秒的事情,手机足可以解决。这会不会鼓励让学生上课时都上网呢?还是那个观点,对堵不住的事情,就不要堵了,而是想办法引导学生用好。现在上课时看手机的学生不算稀少,多数在看电子书,或发短信,或用QQ。如果他们上网是在搜索对老师的某观点的质疑,或是发出一条微博表达自己的一个疑惑或心得,那不就是好事了吗?我倒是希望在我的课堂上,我在那儿叨叨,我的学生把着手机做着课程的现场直播,甚至我也拿出手机参与进去了。
      与Email相比,微博不是一对一的,可以让更多的人参与进来。以前用Email给学生解答了不少问题,想到有些问题具有共性,常常征得同学同意后再整理成博文等发布,花时间不少,但可能真正需要的人也看不到。再就是问者罗嗦,答者也不惜墨,洋洋洒洒,倒是写得不少,哪有微博精炼。当然,若有私密问题,Email是最好的途径。
      我非常反对学生以学习的名义使用QQ等即时工具,至于拿手机挂QQ更不可取。我是QQ声一响,就无法安心工作的人,相信大多人也有这样的体会,但一直放不下。实际上,大学生在学习中,要沉下心来,没有必要这样随时联系到,宝贵的大段时间就会被QQ拆散。我的工作也是这样。微博是面向大众的短信,利用碎片的时间看一看足矣,如课间、饭后,甚至到饭馆中点了盖浇饭等饭的那一点点时间。
      人人网等虚拟社区我没有用过,自是不敢玩的太深。仅有的映像是,人人网重在维护一个熟人的圈子,谈些熟人之间才能讲的事,多些家常里短,而微博更多靠相同的兴趣聚集。说不来太多,但总感觉人人网类似老同学坐到一起拉拉家常,微博则是志趣相投者能够各抒己见。要用于教学,后者更合适。
      微博答疑和博客交作业相比,博客是正面战场,而微博则可以补充点点滴滴,并且在学习中增添更多乐趣,让学习变得更加生动。
      现在学校已经建设了BB等专业的教学平台,在教学材料展示,学生留言等方面给了更多支持。我认为在教学中应该多利用免费的公用平台,像新浪博客、微博等。其一,公用平台紧跟时代潮流,更吸引人,更被年轻人喜欢,也让学生在学习中更加适应技术、社会发展的需要;其二,利用公共平台的开放性,使学生有机会接触到业界中的高手,接受生产一线的高人指点,主要靠教师建设的BB平台,自然是封闭且全面落败的了。以后在使用BB平台时,也只注重展示一些不便公开的一些私有资料为主。

      写完这一长段的文字,思路也逐渐明确。要将这些一一落实下来,还需要结合教学内容下一番苦功准备。到教学工作真正展开之时,至少是在我初探之时,必将耗费更多精力。但这毕竟是一件很有意思的事情,也有望得到好的教学效果。李开复给女儿描述自己的工作时说:“我每天的工作就是写Email。”有一天,我可能会告诉别人:“我每天的工作就是写博文、回微博。”
      那是相当的酷。

    注:这篇文章原于2011年6月28日发在我的 新浪博客上,原文见 http://blog.sina.com.cn/s/blog_5717f02f0100u3mv.html。随着一些实践的展开(见 我的CSDN博客首页),已经有了更多的体会。我已经将自己的教学博文全部转移到CSDN,我的学生们正在忙于考试,下学期他们也将转战到CSDN。想起这是一系列工作的源头,转过来,和学生们共勉。
    展开全文
  • 笔记本散热---热管原理

    万次阅读 2018-10-09 15:27:37
    热管这项技术早在1963年就在位于美国的LosAlamos国家实验室中诞生了,其...以前热管技术一直被广泛应用在宇航、军工等行业,被引入散热器制造业还是近几年的事情。 正是因为有热管技术的存在,使得人们改变了传统...

    热管这项技术早在1963年就在位于美国的LosAlamos国家实验室中诞生了,其发明人是G.M.Grover。热管属于一种传热元件,它充分利用了热传导原理与致冷介质的快速热传递性质,透过热管将发热物体的热量迅速传递到热源外,其导热能力已远远超过任何已知金属的导热能力。以前热管技术一直被广泛应用在宇航、军工等行业,被引入散热器制造业还是近几年的事情。
    正是因为有热管技术的存在,使得人们改变了传统散热器的设计思路,摆脱了单纯依靠大风量风扇获得更好散热效果的传统散热模式。取而代之的是采用低转速、低风量风扇配合热管技术的崭新散热模式。热管技术更为PC的静音时代带来了契机。

    走近热管看究竟

    热管技术为什么会有如此的高性能呢?这个问题我们要从热力学的角度看。物体的吸热、放热是相对的,凡是有温度差存在的时候,就必然出现热从高温处向低温处传递的现象。热传递有3种方式:辐射、对流、传导,其中热传导最快。
    热管就是利用蒸发制冷,使得热管两端温度差很大,使热量快速传导。常见的热管均是由管壳、吸液芯和端盖组成。制作方法是将热管内部抽成负压状态,然后充入适当的液体,这种液体沸点很低,容易挥发。管壁有吸液芯,由毛细多孔材料构成。
    热管一端为蒸发端,另外一端为冷凝端。当热管一段受热时,毛细管中的液体迅速蒸发,蒸气在微小的压力差下流向另外一端,并且释放出热量,重新凝结成液体。液体再沿多孔材料靠毛细力的作用流回蒸发段,如此循环不止。热量由热管一端传至另外一端,这种循环是快速进行的,热量可以被源源不断地传导开来。

    热管的技术特点

    • → 高速度的热传导效果
    • → 重量轻且构造简单
    • → 温度分布平均,可作均温或等温动作。
    • → 热传输量大。热传送距离长。
    • → 没有主动元件,本身并不耗电。
    • → 没有热传方向的限制,蒸发端以及凝结端可以互换。
    • → 容易加工以改变热传输方向。
    • → 耐用、寿命长、可靠,易存放保管。

    热管的制作工艺

    • 看似简单的热管其实对工艺的要求是非常高的,下面让我们来一起看看它的工艺及测试:
    • → 工作流体选定:非燃性、操作温度、热传量、容许热阻、经济性。
    • → 容器材料选定:热传导性、真空维持度、耐压、流体相容性(腐蚀、化学反应)。
    • → 容器及注入加工:长度、去毛边、洗净、封口、保存。泄漏测试就:氦气泄漏探测、高压气泡检查(防止容器出现针孔、裂隙以及氧化)。
    • → 真空烘烤:高温、真空的环境下对热管组件作毛细表面脱水、脱氧处理。
    • → 工作流体真空处理:加热驱出(液态)、气态液化(气态)、真空补汞法。注入封口:钨电极纯气熔接(这对于导热管来说,是唯一的防漏封口法)。
    • → 抽样测试:氧化/腐蚀耐用性测试、最大热传效能测试、最大弯曲/扁平后泄漏测试、最大弯曲/扁平后效能测试、寿命测试。

    其他特性限制

    • 在热传输上,热管也有一些限制:
    • → 黏性限制:低温的蒸气流动黏性力。
    • → 音速限制:蒸气流达音速的塞流现象。
    • → 飞散限制:蒸气流速过大,超过液体表面张力,使液滴飞散的剪断力。
    • → 毛细管限制:流体的流量大于毛细输送能力。此现象易使毛细干燥,烧毁导管。
    • → 沸腾限制:所有流体都达沸腾汽化时,会降低传热的能力。

    电脑内部 散热管

    是空心抽真空放入导热液体的

    展开全文
  • 图l是其电路原理,输入信号由晶体T1的基极引入,T1和T2构成差分对,T3作为T1、T2的恒流源.T1的输出直接用于驱动T4,T4和T5构成串联对,T4、T5的恒流源由T6、T7构成。  晶体T8和T9用作二极管,它们的作用...
  • 以资产净利率(ROA)和每股收益(EPS)作为企业的绩效衡量指标,引入线性回归分析模型进行数据分析,发现房地产行业的高薪酬和公司绩效存在显著相关性,而传统制造业的高薪酬和公司绩效相关性并不明显,电子信息行业的高...
  • linux无名管道和有名管道

    万次阅读 多人点赞 2017-04-07 16:27:04
    为了实现命名管道,引入了一种新的文件类型——FIFO文件(遵循先进先出的原则)。实现一个命名管道实际上就是实现一个FIFO文件。命名管道一旦建立,之后它的读、写以及关闭操作都与普通管道完全相同。虽然FIFO文件的...

    1无名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。

        单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。

        数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。(有点像队列哈)

    #include <unistd.h>
    int pipe(int fd[2])

        该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由 pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共同的祖先,都可以采用管道方式来进行通信)。

        向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么写操作将一直阻塞。

    注:只有在管道的读端存在时,向管道中写入数据才有意义。否则,向管道中写入数据的进程将收到内核传来的SIFPIPE信号,应用程序可以处理该信号,也可以忽略(默认动作则是应用程序终止)。

    2)有名管道:不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。

    有名管道的创建

    #include <sys/types.h>
    #include <sys/stat.h>
    int mkfifo(const char * pathname, mode_t mode)

        该函数的第一个参数是一个普通的路径名,也就是创建后FIFO的名字。第二个参数与打开普通文件的open()函数中的mode参数相同。如果mkfifo的第一个参数是一个已经存在的路径名时,会返回EEXIST错误,所以一般典型的调用代码首先会检查是否返回该错误,如果确实返回该错误,那么只要调用打开FIFO的函数就可以了。一般文件的I/O函数都可以用于FIFO,如closereadwrite等等

    3)无名管道由一个在基本文件系统存储设备上的INODE,一个与其相连的内存INODE,两个打开文件控制块(分别对应管道的信息发送端和信息接收端)及其所属进程的描述信息来标识,在系统执行PIPEP)命令行之后生成。并在P[0]中返回管道的读通道打开文件描述等,在P[1]中返回管道的写通道打开文件描述符。从结构上看,无名管道没有文件路径名,不占用文件目录项,因此文件目录结构中的链表不适用于这种文件,它只是存在于打开文件结构中的一个临时文件,随其所依附的进程的生存而生存,当进程终止时,无名管道也随之消亡。

    送入管道的信息一旦被读进程取用就从管道中消失了,读写操作之间符合先进先出的队列原则。

        管道文件是进程间通信的工具,为了尽量少的占用系统存储资源,一般系统均将其限制为最大长度为4096PIPSIZ)字节的小型文件。当欲写入的消息超过4096字节时,就产生了读、写进程之间的同步问题。首先写操作查找PIPE文件中当前指针的偏移量F-OFFSET,然后从此位置开始尽量写入信息,当长度达到4096字节时,系统控制写进程进入睡眠状态,一直等待读进程取走全部信息时,文件长度指针置0,写进程才被唤醒继续工作。

        为防止多个进程同时读写一个管道文件而产生混乱,在管道文件的INODE标志字I-FLAY项中设置了ILOCK标志项,以设置软件锁的方式实现多进程间对管道文件的互斥使用。

    无名管道存在着如下两个严重的缺点

        第一,无名管道只能用于连接具有共同祖先的进程。

        第二,无名管道是依附进程而临时存在的。所以后来推出了一种无名管道的变种-有名管道,它常被称为FIFO。有名管道除继承了无名管道的所有特性优点之外,还屏弃了无名管道的两个缺点。

        首先,FIFO是一种永久性的机构,它具有普通的UNIX系统文件名。在系统下可利用MKNOD命令建立永久的管道,除非刻意删除它,否则它将一直保持在系统中。

    其次,正是由于有名管道以“文件名”来标识,所以只要事先约定某一特定文件名,那样所有知道该约定的服务进程,不论它们之间是否有亲属关系,都可以便利地利用管道进行通信。

        通过下面的命令可以创建一个命名管道:

    /etc/mknod pipe_name p 

        其中“pipe_name”是要创建的命名管道的名字,参数p必须出现在命名管道名字之后。 

        命名管道文件被创建后,一些进程就可以不断地将信息写入命名管道文件里,而另一些进程也可以不断地从命名管道文件中读取信息。对命名管道文件的读写操作是可以同时进行的。下面的例子显示命名管道的工作过程。

        进程ABC中运行的程序只是一条简单的echo命令,它们不断地把信息写入到命名管道文件/tmp/pipe1中。与此同时,程序中的“read msg”命令不断地从命名管道文件/tmp/pipe1中读取这些信息,从而实现这些进程间的信息交换。 

        程序执行时,首先创建命名管道文件,此时程序处于等待状态,直到ABC进程中某一个进程往命名管道中写入信息时,程序才继续往下执行。使用rm命令可以删除命名管道文件从而清除已设置的 命名管道。 

        下面是一个用于记录考勤的例子: 

        在主机上运行的程序/tmp/text产生命名管道/tmp/pipe1,并不断地从命名管道中读取信息送屏幕上显示。 

    /tmp/text程序:

    if [ ! -p /tmp/pipe1 ]
    then
      /etc/mknode /tmp/pipe1 p
    fi
    while :
    do
      read msg
      if [ “$msg" = “" ]
      then
    continue
      else
    echo “$msg"
      fi
    done < /tmp/pipe1

       在终端上运行的是雇员签到程序/tmp/text1。每个雇员在任何一台终端上键入自己的名字或代码,程序/tmp/text1将把这个名字连同当时的签到时间送入命名管道。

    /tmp/text1程序:

    tty=‘who am I | awk ‘{print $2}’’
    while :
    do
    echo “Enter your name: \c" > /dev/$tty
          read name
          today=‘date’
          echo “$name\t$today"
          done > /tmp/pipe1

    当雇员从终端上输入自己的姓名后,运行/tmp/text程序的主机将显示类似下面的结果: 

    wang Thu Jan 28 09:29:26 BTJ 1999
    he Thu Jan 28 09:29:26 BTJ 1999
    cheng Thu Jan 28 09:30:26 BTJ 1999
    zhang Thu Jan 28 09:31:26 BTJ 1999

    named pipes(命名管道)管道具有很好的使用灵活性,表现在:

       1) 既可用于本地,又可用于网络。

       2) 可以通过它的名称而被引用。

       3) 支持多客户机连接。

       4) 支持双向通信。

       5) 支持异步重叠I/O操作。

    不过,当前只有Windows NT,UNIX支持服务端的命名管道技术,win95/97/98等不支持。SQL Server等数据库就有named pipes的连接方式。

    (资料来源于互联网)


    ========================================================================================================

    ===========================================================================================================

    管道:

    管道是进程间通信的主要手段之一。一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端。管道是一种特殊的文件,它不属于某一种文件系统,而是一种独立的文件系统,有其自己的数据结构。根据管道的适用范围将其分为:无名管道和命名管道。

    无名管道

    主要用于父进程与子进程之间,或者两个兄弟进程之间。在linux系统中可以通过系统调用建立起一个单向的通信管道,且这种关系只能由父进程来建立。因此,每个管道都是单向的,当需要双向通信时就需要建立起两个管道。管道两端的进程均将该管道看做一个文件,一个进程负责往管道中写内容,而另一个从管道中读取。这种传输遵循“先入先出”(FIFO)的规则。

    命名管道

    命名管道是为了解决无名管道只能用于近亲进程之间通信的缺陷而设计的。命名管道是建立在实际的磁盘介质或文件系统(而不是只存在于内存中)上有自己名字的文件,任何进程可以在任何时间通过文件名或路径名与该文件建立联系。为了实现命名管道,引入了一种新的文件类型——FIFO文件(遵循先进先出的原则)。实现一个命名管道实际上就是实现一个FIFO文件。命名管道一旦建立,之后它的读、写以及关闭操作都与普通管道完全相同。虽然FIFO文件的inode节点在磁盘上,但是仅是一个节点而已,文件的数据还是存在于内存缓冲页面中,和普通管道相同。

     

    实现机制:

    管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大一般为4K大小,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

    \

    从原理上,管道利用fork机制建立,从而让两个进程可以连接到同一个PIPE上。最开始的时候,上面的两个箭头都连接在同一个进程Process 1上(连接在Process 1上的两个箭头)。当fork复制进程的时候,会将这两个连接也复制到新的进程(Process 2)。随后,每个进程关闭自己不需要的一个连接 (两个黑色的箭头被关闭; Process 1关闭从PIPE来的输入连接,Process 2关闭输出到PIPE的连接),这样,剩下的红色连接就构成了如上图的PIPE。

    \

    详细的管道创建过程如下图:

    \

    实现细节:

    在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。如下图

    \

    有两个 file 数据结构,但它们定义文件操作例程地址是不同的,其中一个是向管道中写入数据的例程地址,而另一个是从管道中读出数据的例程地址。这样,用户程序的系统调用仍然是通常的文件操作,而内核却利用这种抽象机制实现了管道这一特殊操作。

     

    关于管道的读写

    管道实现的源代码在fs/pipe.c中,在pipe.c中有很多函数,其中有两个函数比较重要,即管道读函数pipe_read()和管道写函数pipe_wrtie()。管道写函数通过将字节复制到 VFS 索引节点指向的物理内存而写入数据,而管道读函数则通过复制物理内存中的字节而读出数据。当然,内核必须利用一定的机制同步对管道的访问,为此,内核使用了锁、等待队列和信号。

    当写进程向管道中写入时,它利用标准的库函数write(),系统根据库函数传递的文件描述符,可找到该文件的 file 结构。file 结构中指定了用来进行写操作的函数(即写入函数)地址,于是,内核调用该函数完成写操作。写入函数在向内存中写入数据之前,必须首先检查 VFS 索引节点中的信息,同时满足如下条件时,才能进行实际的内存复制工作:

    ·内存中有足够的空间可容纳所有要写入的数据;

    ·内存没有被读程序锁定。

    如果同时满足上述条件,写入函数首先锁定内存,然后从写进程的地址空间中复制数据到内存。否则,写入进程就休眠在 VFS 索引节点的等待队列中,接下来,内核将调用调度程序,而调度程序会选择其他进程运行。写入进程实际处于可中断的等待状态,当内存中有足够的空间可以容纳写入数据,或内存被解锁时,读取进程会唤醒写入进程,这时,写入进程将接收到信号。当数据写入内存之后,内存被解锁,而所有休眠在索引节点的读取进程会被唤醒。

    管道的读取过程和写入过程类似。但是,进程可以在没有数据或内存被锁定时立即返回错误信息,而不是阻塞该进程,这依赖于文件或管道的打开模式。反之,进程可以休眠在索引节点的等待队列中等待写入进程写入数据。当所有的进程完成了管道操作之后,管道的索引节点被丢弃,而共享数据页也被释放。

    Linux函数原型

    int pipe(int filedes[2]);

    filedes[0]用于读出数据,读取时必须关闭写入端,即close(filedes[1]);

    filedes[1]用于写入数据,写入时必须关闭读取端,即close(filedes[0])。

    程序实例:

    int main(void)
    {
        int n;
        int fd[2];
        pid_t pid;
        char line[MAXLINE];
       
        if(pipe(fd)  0){                 /* 先建立管道得到一对文件描述符 */
            exit(0);
        }
    
        if((pid = fork())  0)            /* 父进程把文件描述符复制给子进程 */
            exit(1);
        else if(pid > 0){                /* 父进程写 */
            close(fd[0]);                /* 关闭读描述符 */
            write(fd[1], "\nhello world\n", 14);
        }
        else{                            /* 子进程读 */
            close(fd[1]);                /* 关闭写端 */
            n = read(fd[0], line, MAXLINE);
            write(STDOUT_FILENO, line, n);
        }
    
        exit(0);
    }
    命名管道(named PIPE)

    由于基于fork机制,所以管道只能用于父进程和子进程之间,或者拥有相同祖先的两个子进程之间 (有亲缘关系的进程之间)。为了解决这一问题,Linux提供了FIFO方式连接进程。FIFO又叫做命名管道(named PIPE)。

    FIFO (First in, First out)为一种特殊的文件类型,它在文件系统中有对应的路径。当一个进程以读(r)的方式打开该文件,而另一个进程以写(w)的方式打开该文件,那么内核就会在这两个进程之间建立管道,所以FIFO实际上也由内核管理,不与硬盘打交道。之所以叫FIFO,是因为管道本质上是一个先进先出的队列数据结构,最早放入的数据被最先读出来,从而保证信息交流的顺序。FIFO只是借用了文件系统(file system,命名管道是一种特殊类型的文件,因为Linux中所有事物都是文件,它在文件系统中以文件名的形式存在。)来为管道命名。写模式的进程向FIFO文件中写入,而读模式的进程从FIFO文件中读出。当删除FIFO文件时,管道连接也随之消失。FIFO的好处在于我们可以通过文件的路径来识别管道,从而让没有亲缘关系的进程之间建立连接

    函数原型:

    int mkfifo(const char *filename, mode_t mode);
    int mknode(const char *filename, mode_t mode | S_IFIFO, (dev_t) 0 );

    其中pathname是被创建的文件名称,mode表示将在该文件上设置的权限位和将被创建的文件类型(在此情况下为S_IFIFO),dev是当创建设备特殊文件时使用的一个值。因此,对于先进先出文件它的值为0。

    程序实例:

    int main()  
    {  
        int res = mkfifo("/tmp/my_fifo", 0777);  
        if (res == 0)  
        {  
            printf("FIFO created/n");  
        }  
         exit(EXIT_SUCCESS);  
    }  

    编译这个程序:

    gcc –o fifo1.c fifo

    运行这个程序:

    $ ./fifo1

    用ls命令查看所创建的管道

    $ ls -lF /tmp/my_fifo

    prwxr-xr-x 1 root root 0 05-08 20:10 /tmp/my_fifo|

    注意:ls命令的输出结果中的第一个字符为p,表示这是一个管道。最后的|符号是由ls命令的-F选项添加的,它也表示是这是一个管道。


    FIFO读写规则 

    从FIFO中读取数据:

    约定:如果一个进程为了从FIFO中读取数据而阻塞打开FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作

    • (1)如果有进程写打开FIFO,且当前FIFO内没有数据,则对于设置了阻塞标志的读操作来说,将一直阻塞。对于没有设置阻塞标志读操作来说则返回-1,当前errno值为EAGAIN,提醒以后再试。
    • (2)对于设置了阻塞标志的读操作说,造成阻塞的原因有两种:当前FIFO内有数据,但有其它进程在读这些数据;另外就是FIFO内没有数据。解阻塞的原因则是FIFO中有新的数据写入,不论信写入数据量的大小,也不论读操作请求多少数据量。
    • (3)读打开的阻塞标志只对本进程第一个读操作施加作用,如果本进程内有多个读操作序列,则在第一个读操作被唤醒并完成读操作后,其它将要执行的读操作将不再阻塞,即使在执行读操作时,FIFO中没有数据也一样(此时,读操作返回0)。
    • (4)如果没有进程写打开FIFO,则设置了阻塞标志的读操作会阻塞。
    • 注:如果FIFO中有数据,则设置了阻塞标志的读操作不会因为FIFO中的字节数小于请求读的字节数而阻塞,此时,读操作会返回FIFO中现有的数据量。


    向FIFO中写入数据:

    约定:如果一个进程为了向FIFO中写入数据而阻塞打开FIFO,那么称该进程内的写操作为设置了阻塞标志的写操作

    对于设置了阻塞标志的写操作

    • (1)当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。如果此时管道空闲缓冲区不足以容纳要写入的字节数,则进入睡眠,直到当缓冲区中能够容纳要写入的字节数时,才开始进行一次性写操作。
    • (2)当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。FIFO缓冲区一有空闲区域,写进程就会试图向管道写入数据,写操作在写完所有请求写的数据后返回。

    对于没有设置阻塞标志的写操作

    • (1)当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。如果当前FIFO空闲缓冲区能够容纳请求写入的字节数,写完后成功返回;如果当前FIFO空闲缓冲区不能够容纳请求写入的字节数,则返回EAGAIN错误,提醒以后再写;
      • (2)当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。在写满所有FIFO空闲缓冲区后,写操作返回。


    【参考】

    http://www.2cto.com/os/201607/528773.html

    http://www.cnblogs.com/mydomain/archive/2011/04/26/2029493.html


    展开全文
  • 采用不同酸处理方法对碳纳米进行官能团化,并用酸碱滴定、红外光谱和拉曼光谱对碳...羧基的引入需要强氧化作用,总酸量和羧基含量随着氧化程度的增强而增加;可以通过控制处理条件改变碳管表面官能团的种类和数量。
  • vue是一款渐进式的框架,何为渐进式,我的理解就是可以根据你的需要来按需引入vue所提供的服务而没有一定的要求。它不同于Angular.js,当你使用Angular.js的时候你就要必须使用它的依赖注入、模块机制等等。鉴于vue...
  • 图l是其电路原理,输入信号由晶体T1的基极引入,T1和T2构成差分对,T3作为T1、T2的恒流源.T1的输出直接用于驱动T4,T4和T5构成串联对,T4、T5的恒流源由T6、T7构成。  晶体T8和T9用作二极管,它们的作用...
  • 如今,P2P平台“去担保”的呼声愈发强烈,其中,引入保险机构成为一些P2P平台选择的方向。  近日,广州网贷平台礼德财富CEO洪凯彬对《第一财经日报》记者透露,他们正与中国人保探讨P2P与保险的合作模式,为“去...
  • 刚刚有看到一篇文章写的是COOLMOS与常规MOS的区别,这是一篇名为《初学者必备知识——功率场效应晶体MOS》里面有介绍很多MOS知识,在这我就不说别的,我们来说说COOLMOS,因为本公司-深圳市凯泰电子有限...
  • 氨基化碳纳米引入己内酯单体微波辅助开环聚合...利用扫描电镜、X射线衍射、示差扫描量热分析和动态力学分析揭示了纳米复合材料的断裂形貌、结晶情况和热性质,进而探讨了氨基化碳纳米对提高力学性能的关键作用
  • 碳纳米在含有Eu3+的硝酸溶液中进行回流,在其表面引入了带负电的官能团,这些官能团能够吸附Eu¨,同时强酸可使碳纳米的两端开口,金属盐通过毛细作用进入碳管的空腔内,经过滴定、水洗和煅烧制备出Eu2O3组装的...
  • MOS及其外围电路设计

    千次阅读 多人点赞 2019-08-12 12:04:38
    常用的mos驱动电路结构如图1所示,驱动信号经过图腾柱放大后,经过一个驱动电阻Rg给mos驱动。其中Lk是驱动回路的感抗,一般包含mos引脚的感抗,PCB走线的感抗等。在现在很多的应用中,用于放大驱动信号的图腾...
  • 首先是 belongTo 关联。何谓“belongTo”,我们不妨这样说(“属于”这里表示特定的关系): 公司数据库中,账单 accout 属于 公司 company; 论坛程序中,帖子 thread 属于论坛 forum,也属于分类 cateory...
  • MOS开关频率如何测算 MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电压有一个下降的过程,流过的电流有一个上升的过程,在这段时间内,MOS的损失是电压和电流的乘积,叫做开关损失。通常开关...
  • 晶体介绍工作原理与历史

    千次阅读 2018-01-12 10:52:20
    转载路径 ...与普通机械开关(如Relay、switch)不同,晶体利用电讯号来控制自身的开合,而且开关速度可以非常快,实验室中的切换速度可达100GHz以上。  晶体,本名是半导体三极管,是内部含有
  • Mongodb中数据聚合之聚合管道aggregate

    万次阅读 2016-05-22 11:05:08
    在之前的两篇文章Mongodb中数据聚合之基本聚合函数count、distinct、group >和Mongodb中数据聚合之MapReduce ...面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(a
  • Angular2 中管道@Pipe的简单用法

    千次阅读 2017-12-08 14:33:53
    在Angular2中有各种各样的类修饰器,比如:@App,@Component,@input,@output...其实这是一个过滤器的修饰声明,和Angular1中的filter的作用是一样的,有了filter能对数据处理提供强大的通用性和便利性,不过从Angula
  • 而在使用过程中,高压MOS的导通电阻都是决定耗散功率的重要参数,所以应用好MOS导通作用能够提升设备效率。今天,为了大家能够更好的应用MOS,飞虹小编分享一下该怎么降低高压MOS的导通电阻。  降低...
  • MOS串联

    千次阅读 2020-06-05 17:53:37
    MOS串联 I-V曲线本来应该一样,但是由于effL,PSE的存在,以及间接导致的DIBL,都会让这两个曲线有区别 长沟道器件,两者近似。短沟道器件差别大。 其实单纯从W/L上考虑应该是没有区别的。 使用两个(或多个)串联...
  • 根据BWO的振荡机理,引入过模反射腔,并使其同相应的慢波结构匹配,克服了过模结构中的模式竞争问题,提高了电子束同慢波结构互作用效率。从理论和模 拟两个方面研究了过模返波中的模式控制,设计了一个X波段输出功率...
  • 晶体及其内部原理

    千次阅读 2019-05-26 19:40:41
    晶体 内部 了解了半导体后,我们开始了解晶体,也叫三极管。其内部由两个PN结组成,自然有PNP和NPN两种,但这不重要。 重要的是,晶体分为发射极(e),基极(b),集电极(c) 由于我们学习的是晶体...
  • Linux 管道(pipe)原理及使用

    千次阅读 2013-12-20 17:44:53
    可以引入信号量,有效的保护临界区代码,就可以避免这些问题。在单任务环境下,也可以通过采取适当的措施来避免信号量的使用,从而提高程序的执行效率。 4.linux 内核中 pipe 的读写实现 Linux 内核中采用 ...
  • 为研究地下水渗流对埋换热器传热的影响,以移动热源的格林函数为基础,通过引入虚拟热汇,由叠加原理建立热渗耦合作用下的有限长线热源模型。将此模型与有渗流无限长线热源模型和无渗流有限长线热源模型作了对比,...
  • 还可以引入 复杂性 ,特别是如果 被 分布在 不同的服务器上 在管道 的过滤器。 •可靠性 。 使用一个 基础结构, 可以确保 在管道中 的过滤器 之间流动的 数据 也不会丢失 。 • 幂等性 。 如果 在管道中 的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,695
精华内容 29,878
关键字:

引入管的作用