- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Nginx负载均衡及多线程智慧农业系统设计
基于Nginx负载均衡及多线程智慧农业系统设计 摘 要:鉴于Nginx服务器在负载均衡方面的优越性能,将其运用到智慧农业系统设计中,可以很好地解决系统在大并发访问下的性能瓶颈问题。智慧系统中应用服务器来处理指令信息的中转,有很复杂的业务逻辑关系,而利用Java多线程技术可以很好的处理这些业务逻辑
关键词:Nginx服务器;负载均衡;Java多线程;智慧农业系统
中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2017)04-0-02
0 引 言
基于底层传感器节点采集信息的智慧农业系统,可以大量获取作物的生长环境参数,在Web平台上显示时,会有大量用户进行作物实时参数的查询请求,加入Nginx负载均衡,能够使Web服务器更好的应对高并发的用户访问场景。在系统中,通过PC网站发送控制指令,经由Web服务器传达到应用服务器,由应用服务器转发给嵌入式服务器。应用服务器由收指令线程和发指令线程组成,通过线程之间的同步和通信可以很好地保障指令发送的正确性,可靠性
1 Nginx负载均衡
Nginx是Igor Sysoev使用C语言为俄罗斯门户网站Rambler.ru开发的一款Web服务器。Nginx以其高性能、稳定、功能丰富、配置简单灵活以及内存消耗低等特点而受到国内外企业的广泛青睐
当Nginx服务器启动后,它将产生一个主进程(Master Process),主进程在执行一些业务后,会产生一到多个工作进程(Worker Process)。主进程主要完成Nginx配置文件解析、模块配置和注册、数据结构初始化、网络监听生成、工作进程生成和管理以及信号处理;工作进程主要包括模块调用、进程初始化以及请求处理,是Nginx服务器运行过程中提供服务的主要工作部分。Nginx使用一个主进程来管理多个工作进程,通过内存共享等进程间通信机制实现Nginx的负载均衡等功能。Nginx的结构关系如图1所示
2 Java里的多线程同步机制
在多线程程式中,所有线程都是各自独立的执行体,但线程代码的模式却相同。如果这些线程协同工作,那么其线程代码无法重入控制,因此Java提供了相应的同步机制,从而阻止多个线程的一个或多个关键代码在任意时间执行该代码。该机制建立在锁的概念和监视器基础上,其中监视器是关键代码周围的保护伞,锁则是监视器阻止线程进入监视器的软件。其基本理念是:如果一个线程要进入监视器所监视的关键代码,该线程需要获取一个与之相关的锁;如果别的线程在使用该锁,那么Java就会强制要求其在一个与锁以及监视器相关的区域等待;当锁被释放时,Java移出等待状态中的线程,同意其获取锁,并对监视器的关键代码进行相应处理。在Java编程过程中经常使用Synchronized方法和Synchronized代码块进行线程的同步
2.1 Synchronized方法
把 Synchronized 的 关 键 字 加 入 方 法 声 明 中以声 明synchronized()方法。在 synchronized()方法中,类成员变量访问由 synchronized()方法控制,每个类实例都会对应一个锁,如果synchronized()方法要执行就要获取相应的锁,否则会阻塞所属线程。一旦该方法进入执行状态就会独占一个锁,且直至其返回才会释放。这种机制可以确保在同一时间对于每一个类实例,其声明为Synchronized的成员函数最多只能有一个处于执行状态,从而避免类成员变量访问产生冲突。Java中每个类都对应一把这样的锁,因此要控制其访问类的静态成员变量,可把类的静态成员函数声明为 Synchronized
2.2 Synchronized代码块
上述方法中,如果代码量较多,则声明的效率会大受影响,因此我们可以用 Synchronized块来解决该问题。Synchronized块中要获取SynObject对应的锁才可以执行,由于可以对任何代码块且上锁的对象任意指定,因此相对 Synchronized块方法有较高的灵活性
3 多线程同步在系统中的应用
在智慧农业系统中,应用服务器主要负责Web服务器发送的指令接收和指令向嵌入式服务器的发送以及上行数据在数据库的存储。应用服务器的模块构成如图2所示
Web服务器的指令请求发到应用服务器,应用服务器会通过管理模块起一个进程,并运行主线程来开启指令接收的线程,同时开启上行数据存储线程来接收嵌入式服务器上传的监测数据,并存储到MySQL数据库中。指令接收线程接收到指令数据后会启动指令发送线程来向嵌入式服务器发送指令数据。指令接收线程和指令发送线程之间的协作通过线程的同步机制Synchronized代码块实现。为防止两个不同线程在访问共享
您可能关注的文档
最近下载
- 简约中国农业银行专用PPT模板.pptx VIP
- 第2课 自然语言描述算法 课件.ppt VIP
- 2025秋人教版八上《道德与法治》八年级上册新学期开学教学计划及进度安排.docx VIP
- 数据中心建设项目可行性研究报告.docx
- Q∕GDW 11793-2017 输电线路金具压接质量X射线检测技术导则.docx VIP
- 《诗经》中的《静女》.pptx VIP
- 小学数学新西师版三年级上册全册教案(2025秋).doc
- 智能制造系统集成应用(中级)全套PPT课件.pptx VIP
- 2025-2026学年小学科学二年级上册粤教粤科版(2024)教学设计合集.docx
- 2024年香港公司股份转让协议书范本.docx VIP
文档评论(0)