网页的最大化,最小化,最大化的JS代码如何写?

网页的最大化,最小化,最大化的JS代码如何写?,第1张

<html xmlns=">

Netty是由JBOSS提供的基于Java NIO的开源框架,Netty提供异步非阻塞、事件驱动、高性能、高可靠、高可定制性的网络应用程序和工具,可用于开发服务端和客户端。

JAVA原先是采用的是传统的BIO,为什么后来又研发出了NIO呢?

首先看看传统的基于同步阻塞IO(BIO)的线程模型图

BIO主要存在以下缺点:

1从线程模型图中可以看到,一连接一线程,由于线程数是有限的,所以这样的模型是非常消耗资源的,

最终也导致它不能承受高并发连接的需求

2性能低,因为频繁的进行上下文切换,导致CUP利用率低

3可靠性差,由于所有的IO *** 作都是同步的,即使是业务线程也如此,所以业务线程的IO *** 作也有可能被阻塞,

这将导致系统过分依赖网络的实时情况和外部组件的处理能力,可靠性大大降低

上面的原因就是导致早期的高性能服务器为什么不选用JAVA开发,而是选用C/C++的重要原因。

为了解决上面的问题,NIO横空出世,下面是NIO的线程模型图

1NIO采用了Reactor线程模型,一个Reactor聚合了一个多路复用器Selector,它可以同时注册、监听和轮询

成百上千个Channel,这样一个IO线程可以同时处理很多个客户端连接,线程模型优化为1:N(N<最大句柄、数),

或M:N(M通常为CUP核数+1)

2避免了IO线程频繁的上下文切换,提升了CUP的效率

3所有的IO *** 作都是异步的,所以业务线程的IO *** 作就不用担心阻塞,系统降低了对网络的实时情况和外部组件

的处理能力的依赖

为什么不直接用JDK原生的NIO而选用Netty框架?

先看看JDK的NIO中服务端和客户端的时序图

服务端:

客户端:

从图中我们可以看到,使用JDK原生NIO的不足之处

1NIO的类库和API相当复杂,使用它来开发,需要非常熟练地掌握Selector、ByteBuffer、ServerSocketChannel、SocketChannel等

2需要很多额外的编程技能来辅助使用NIO,例如,因为NIO涉及了Reactor线程模型,所以必须必须对多线程和网络编程非常熟悉才能写出高质量的NIO程序

3想要有高可靠性,工作量和难度都非常的大,因为服务端需要面临客户端频繁的接入和断开、网络闪断、半包读写、失败缓存、网络阻塞的问题,这些将严重影响我们的可靠性,而使用原生NIO解决它们的难度相当大。

4JDK NIO中著名的BUG--epoll空轮询,当select返回0时,会导致Selector空轮询而导致CUP100%,官方表示JDK16之后修复了这个问题,其实只是发生的概率降低了,没有根本上解决。

那么为什么要用Netty呢?

1API使用简单,更容易上手,开发门槛低

2功能强大,预置了多种编解码功能,支持多种主流协议

3定制能力高,可以通过ChannelHandler对通信框架进行灵活地拓展

4高性能,与目前多种NIO主流框架相比,Netty综合性能最高

5高稳定性,解决了JDK NIO的BUG

6经历了大规模的商业应用考验,质量和可靠性都有很好的验证。

Netty能提供什么服务?

1开发异步非阻塞的TCP网络应用程序

2开发异步非阻塞的UDP网络应用程序

3开发异步文件传输程序

4开发异步>

5提供多种编解码的集成框架,包括谷歌Protobuf、JBossMarshalling、Java序列化、压缩编解码、XML解码、

字符串编解码等都可以由用户直接使用

6提供形式多样的编解码基础类库,可以方便地进行私有协议栈编解码框架的二次开发

7基于职责链的Pipeline-Handler机制,可以方便地对网络事件进行拦截和定制

8所有的IO *** 作都是异步的,用户可以通过Future-Listeren机制主动get结果或者等IO线程完成 *** 作之后主动Notify来通知,

用户业务线程不需要同步等待

9基于链路空闲事件监测的心跳机制

10流量控制和整形

在车载系统中,除了与行车 *** 控密切相关的车体、传动及安全系统开始导入更多的电子功能外,资通娱乐系统也越来越多地应用电子技术。当这个结合信息、通信和娱乐的车载应用系统被转移到汽车市场时,也发展出其独到的应用特点。

Telematics是指整合通信与信息的新兴车载应用。在产品定位上,可以分为可携式设备和车装式设备两种。GPS导航定位在Telematics中具有关键性的地位,车载GPS系统除了可为驾驶提供导航信息外,当它与无线通信技术(如GPRS/3G)结合时,可提供定位信息给Telematics的服务供货商,当这些供货商的服务中心收到个别汽车的位置信息后,就能够为车主提供道路救援、失车找回等服务。另外,出租车、公交车或游览车也可采用GPS来发挥车队追踪及控管的功能。在客户端的GPS装置是一个单向的GPS信号接收机,它可以接收来自天空导航卫星的定位信号,这20多颗卫星可传送L1及L2两种信号,使用的频率分别为157542MHz和122760MHz,一般民用的GPS接收机只需接收L1于157542MHz的频率。

GPS定位系统利用卫星基本三角定位原理,由GPS接收装置先找到3颗以上空中卫星的所在位置,再计算每颗卫星与接收器之间的距离,即可得出接收器在三维空间中的坐标值。

进一步来看GPS接收器的系统运作流程(见图1),GPS卫星信号先由GPS天线来接收,再经由RF射频前端将高频信号转为中、低频数字信号,再传送到GPS基频组件,此组件的核心技术在于相关器的设计,也就是透过相关器来比对找出正确的卫星编号,进而对照取得多颗卫星的万年历和广播星历等资料。通道的相关器越多意味着找到卫星位置的速度越快,目前一般的GPS接收器至少提供12个通道的相关器,更高阶的接收器则具有16个,甚至是32个通道的相关器。

GPS接收器的控制功能由微处理器或微控制器来实现,此处理核心可以来自外部,也可嵌入在GPS基频组件当中。目前较初阶的GPS接收器产品常用ARM7作为核心,高阶的机种则会升级到ARM9核心。此外,这类组件也具备微处理器支持功能,例如UART和实时时钟(RTC)。

星历数据会以NMEA0183或RTCM等格式输出到主处理器,进一步与GIS地图引擎整合以显示所在街道位置,或透过无线通信接口传出位置信息,让远程服务器能够提供进一步的相关位置服务。NMEA0183是GPS惯用的一种标准通信协议,它采用简化ASCII的序列通信协议来定义数据传送的格式。当GPS采用差分定位(DGPS)的辅助定位模式,如美国的WAAS或欧洲的EGNOS系统时,则需输出RTCM或NTRIP10的协议格式。此外,由于不同的接收器所提供的原始数据格式通常会不同,当有需要针对不同型号接收器收集的数据进行统一处理时,就必须建立GPS通用数据交换格式。综上所述,一部车载GPS的硬件系统架构中,主要单元包括天线、RF前端、基频/相关器、处理器核心,此外,还包括内存、总线接口。这些单元可以采用离散式的方法来提高设计上的d性,也可采用整合式的策略,将多个单元整合为一颗系统单芯片(SoC)、单封装(SiP)或模块,以降低设计的难度及成本。

当系统工程师在进行设计时,必须在效能、成本与d性三大评量要件中进行选择。以效能来说,GPS接收器的效能指标有4项,分别是准确性、灵敏度、第一次定位时间、通道数量。当这4项效能指标都要求达到最高时,就必须强调接收器的处理器效能、相关器通道数量、内存容量及高速的对外连接接口。如此一来,产品的成本自然会大幅提升,这时大众市场未必能够接受,因此往往需要做一些必要的调整。

目前的技术已能够将GPS接收器架构中的射频及基频整合在一起,而高整合度的产品能提供更佳的成本效益。以ST的STA2056为例(见图2),它将基频与射频功能整合于小型的QFN-68封装之中。它在基频部分采用ARM7TDMI作为核心,频率可高达66MHz;在射频部分为主动天线系统,含有易与被动天线连接的接口;此外,它还内建ROM及SRAM内存。由于只需要用到少数的外部组件,因此能降低总体物料成本;其小尺寸能让产品设计更为轻薄短小,而且具有低功耗的优势。不仅如此,此类整合性产品也让工程师省下调校射频与基频整合的研究精力,可加速产品上市。GPS天线也是决定GPS效能表现的关键。GPS卫星信号的背景噪讯为-136dBW,为避免干扰,国际电信法规规定卫星传送信号噪讯不得大于-154dBW,GPS的信号实际上相当弱,因此接收天线的灵敏度必须非常高。这和天线的大小及形状密切相关。可用于GPS的天线种类包括片状天线、螺旋式天线和平面倒F型天线(PIFA)等,其中又以片状天线和螺旋式天线使用最多(见图4)。由于GPS的信号属于圆极化波,所以GPS接收天线也必须采用圆极化的工作方式。

平板天线的好处是其耐用性及相对容易制作,成本也较低,不过它具有明显的方向性,平板要面向天空才能得到较好的接收效果。这种方向性会给使用上带来极大的限制;此外,它虽然能顺利接收到正上方的卫星信号,但若没有获取到低角度的卫星信息,误差就会相对较高,精确度也会下降。

较先进的做法是采用四臂螺旋天线,它拥有全面向360°的接收能力,使天线在任何方向都有3dB的增益。这让GPS接收器能以各种角度摆放,而且能接收到低角度的卫星信号。此外,也可导入Balun的电路设计,这样可以有效隔离天线周围的噪讯,能容纳各种功能的天线并存于极小的空间中而不会互相干扰,很适合手持设备的天线设计,不过此类天线的成本仍然偏高。在车载的导航使用中,常会因为遭遇到环境上的遮蔽因素而造成导航工作无法正常运作。在高楼林立的巷道中,收信状况往往极差,当行进隧道中时,更是完全没有信号可用,这时可以透过方位推估(DeadReckoning,DR)技术来作为暂时的导航工具。

DR的技术原理是透过能感测或测量距离及方向改变的装置,来估算出汽车移动位置的改变。正向的行进距离通常采用量程计或加速度计来进行量测;转动角度则使用磁罗盘、陀螺仪或差分里程计来量测;高度上的变化则需使用气压计。整合设计实例见图5。

里程计是每台汽车中必备的装置,GPS接收器可透过CANBus来连接里程计以进行测量,但里程计的缺点是会因使用时间过长导致准确性降低。较先进的做法是采用MEMS技术的加速度计和陀螺仪,它们的体积小,也容易进行系统整合,但是,精确度高的MEMS组件也需要较高的成本。此外,在实际应用中要提升DR系统的精确性,还要时常进行在线传感器的校准,这时就需要GPS的定位信号来修正DR传感器的参数项目。

在短时间内,DR的正确性相当高,甚至可以高于GPS,但随着使用时间的增加,DR的误差累积效应会越来越大,导航的精确度就会大幅下降,这时必须回归到GPS系统来找出绝对的位置,才能再次使用DR。DR和GPS是相辅相成的车载导航系统,但目前商品化的产品仍然不多,主要的瓶颈在于DR传感器的准确度和成本,以及与导航系统整合的算法开发方面。

MDK 软件中的器件支持包 (Pack) 是一种可重用的软件模块,它为用户提供了各种硬件平台、芯片型号、外设驱动等方面的支持。更具体地说,一个器件支持包通常包含如下组成部分:
1 设备描述文件 (Device Description File, ddf):包含了芯片的基本信息,比如内存大小、Flash 和 RAM 的地址范围、时钟频率等等。
2 外设驱动程序 (Driver),可支持多个开发工具的阵营:编写驱动程序是使用 MDK 软件的关键之一。因为该软件的驱动程序是建立在CMSIS模式之上的,因此可以利用该库轻松地实现基于某个特定器件的通用外设驱动。这种驱动程序是每个器件支持包中最重要的资源之一,并且为后来者包括服务器以及SPI、CAN、UART等常见外设提供了方便。
3 中间层库或应用程序软件 (Middleware):提供通用的标准库或其他外部组件,使用户可以轻松地实现各种功能,如文件系统、USB主机/从机设备、网络协议等等,当然了,仅限于您的CPU支持USB主机/从机设备的功能。
4 样例代码 (Examples):为用户提供了易于理解和跟踪的实验室作业,该实验是根据板卡而来的,每个人都可以自己快速复制,自己调整,自己封装的一个完美机会。
在以上四个主要组成部分之上,MDK 软件还提供了一些其他细节方面的支持,如工具流支持、在线技术支持、丰富的API文档和源代码示例等等。每个器件支持包中的文件夹也有不同的作用:
1 Documents 文件夹:包含器件支持包的 PDF 文件以及其他重要的文件,这些文件可以帮助用户了解芯片的详细信息,以及如何使用器件支持包中的资源。
2 Drivers 文件夹:包含一些需要连接到计算机的外围设备所需的驱动程序文件,例如JTAG引脚转换器,如果没有这些驱动程序,那么无法成功地使用软件进行调试。
3 Firmware 文件夹:包含一些可以直接烧录到芯片内部的固件文件,这些固件文件包含了一些预定义的外设设置,比如系统时钟频率、UART 端口配置等等,方便用户进行快速原型测试。
4 Source/Demo 文件夹:包含一些演示程序,这些程序可以让用户更深入地了解如何使用特定的外设,同时也可以作为参考代码,以便用户自己编写自己的应用程序。
5 Inc/Lib 文件夹:包含一些头文件和库文件,这些文件是用户编写自己的应用程序所需的必要环节。Inc 文件夹中的头文件包含了外设寄存器的地址声明和相关函数的原型声明,而 Lib 文件夹中的库文件包含了针对特定的处理器和外设的函数实现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10742046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存