加载中 ...
首页 > 新闻资讯 > 软件开发 正文

通信中间件实现的关键技术探讨论文

2019-03-23 08:39:29 来源:沈阳软件公司 作者:沈阳软件开发

软件开发论文栏目提醒】:本文主要为网学会员提供“通讯中心件实现的要害手艺探讨论文”,希望对需要通讯中心件实现的要害手艺探讨论文网友有所资助,学习一下!

  摘要:漫衍式盘算系统的应用越来越普遍,它是由一组漫衍在网络中差别节点上的历程相互协作来完成使命的。这些历程通过通讯中心件来完成同步、互斥以及数据传送等操作,通讯中心件是漫衍式系统实现的基础。本文就通讯中心件的实现所用到的种种手艺举行了比力详细的先容,从而给读者一些有用的参考和启发。
  要害字:守护历程;Posix线程;互斥锁;读写锁
  
  1、守护历程
  1.1什么是守护历程
  守护历程(Daemon)是运行在后台的特殊历程,它自力于控制终端而且周期性地执行某种使命或等候处置惩罚某些发生的事务。守护历程是一种很有用的历程。[1]UNIX中的大多数服务器就是用守护历程实现的。好比,超级服务器inetd,Web服务器httpd等。同时,守护历程完成许多系统使命。好比,作业计划历程crond,打印历程lpd等。守护历程的编程自己并不庞大,庞大的是种种版本的UNIX的实现机制不尽相同,造成差别UNIX情况下守护历程的编程规则并纷歧致。
  1.2守护历程的特征
  守护历程最主要的特征是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护历程必须与其运行前的情况隔脱离来。这些情况包罗未关闭的文件形貌符,控制终端,会话和历程组,事情目录以及文件建立掩模等。这些情况通常是守护历程从执行它的父历程中继续下来的。最后,守护历程的汇海方式有其特殊之处。它可以在Linux系统汇海时沈阳软件设计<a href=http://www.hvihi.com target=_blank class=infotextkey>沈阳<a href=http://www.hvihi.com target=_blank class=infotextkey>软件开发</a></a>,<a href=http://www.hvihi.com target=_blank class=infotextkey>沈阳<a href=http://www.hvihi.com target=_blank class=infotextkey>软件公司</a></a>从汇海剧本/etc/rcd中汇海,也可以由作业计划历程crond汇海,还可以由用户终端(通常是shell)执行。
  2、POSIX线程
  2.1POSIX线程的建立
  1线程与历程
  相对历程而言,线程是一个越发靠近于执行体的观点,它可以与同历程中的其他线程共享数据,但拥有自己的栈空间,拥有自力的执行序列。在串行程序基础上引入线程是为了提高程序的并发度,从而提高程序运行效率和响应时间。线程和历程在使用上各有优弱点:线程执行开销小,但倒霉于资源的治理和掩护;而历程正相反。同时,线程适合于在SMP机械上运行,而历程则可以跨机械迁徙。[2]
  2建立线程
  POSIX通过pthread_create()函数建立线程,pthread_create()建立的线程并不具备与主线程(即挪用pthread_create()的线程)同样的执行序列,而是使其运行start_routine()函数。thread返回建立的线程ID,而attr是建立线程时设置的线程属性。pthread_create()的返回值表现线程建立是否乐成。只管arg是void*类型的变量,但它同样可以作为恣意类型的参数传给start_routine()函数;同时,start_routine()可以返回一个void*类型的返回值,而这个返回值也可以是其他类型,并由pthread_join()获取。[3]
  2.2线程的作废
  1线程作废的界说
  一样平常情形下,线程在其主体函数退出的时间会自动终止,但同时也可以由于吸收到另一个线程发来的终止(作废)请求而被强制作废。线程的作废类似于线程的终止,但照旧有观点上的差别,虽然作废的目的和效果是终止,可是作废往往是被动的。
  2作废点
  凭据POSIX尺度,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起执行壅闭的系统挪用都是Cancelation-point,而其他pthread函数都不会引起Cancelation行动。可是pthread_cancel的手册页声称,由于LinuxThread库与C库联合得欠好,因而现在C库函数都不是Cancelation-point;但CANCEL信号会使线程从壅闭的系统挪用中退出,并置EINTR错误码,因此可以在需要作为Cancelation-point的系统挪用前后挪用pthread_testcancel(),从而到达POSIX尺度所要求的目的,即如下例子代码段所示[4]
  pthread_testcancel();
  retcode=read(fd,buffer,length);
  pthread_testcancel();
  3程序设计方面的思量
  若是线程处于无限循环中,且循环体内没有执行至作废点的一定路径,则线程无法由外部其他线程的作废请求而终止

等候pthread_cond_timedwait(),其中计时等候方式若是在给准时刻前条件没有知足,则返回ETIMEOUT,竣事等候。无论哪种等候方式,都必须和一个互斥锁配合,以防止多个线程同时请求pthread_cond_wait()的竞争条件(RaceCondition)。

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。