接入服务器内存管理优化方法、接入服务器及通信系统与流程

文档序号:17988825发布日期:2019-06-22 00:37阅读:147来源:国知局
接入服务器内存管理优化方法、接入服务器及通信系统与流程

本发明涉及接入服务器技术领域,特别是涉及一种接入服务器内存管理优化方法、接入服务器、通信系统以及计算机可读存储介质。



背景技术:

接入服务器(connectionserver,cs)用于处理复杂的连接情况,通过接收位于前端的用户受控设备的请求,将筛检完成的请求发至位于后端的管理服务器,由管理服务器完成最终的处理逻辑。如图1接入服务器的连接示意图所示,接入服务器与前端的用户受控设备可能需要同时处理十万以上的连接,而与后端管理管理服务器则通常保持不到100的连接,其连接为收敛状态。

参照图2接入服务器的通信过程示意图,在上行通道,用户受控设备向接入服务器发送受控、上报、保活等请求,接入服务器转发用户受控设备的请求至管理服务器,管理服务器发送响应至接入服务器,接入服务器可以根据响应关闭连接或将响应转发至用户受控设备。在下行通道,管理服务器向接入服务器发送控制指令,接入服务器转发该控制指令至用户受控设备,用户受控设备向接入服务器回复指令,接入服务器将接收到的回复指令转发至管理服务器。

现有的接入服务器方案根据实际使用需求申请需要使用到的内存,每次申请内存都需要从系统中进行调用,极大的增加了系统的开销,拖慢了系统的运行速度。



技术实现要素:

本发明的目的是提供一种接入服务器内存管理优化方法、接入服务器、通信系统以及计算机可读存储介质,以解决现有接入服务器内存管理方法系统开销大、运行速度慢的问题。

为解决上述技术问题,本发明提供一种接入服务器内存管理优化方法,应用于接入服务器,所述方法包括:

接收用户受控设备发送的请求,建立通信连接;

从预先创建的固定内存池中获取固定内存以存放连接信息;

在通过建立的通信连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。

可选地,所述接收用户受控设备发送的请求之前,还包括:

创建固定内存池,所述固定内存池用于存放连接信息;

创建动态内存池,所述动态内存池用于存放传输数据。

可选地,所述从预先创建的动态内存池中申请所需要的内存以存放传输数据包括:

根据所需要的内存的大小,从所述动态内存池中申请对应数量的内存单元以存放传输数据,所述内存单元为固定大小的内存块。

可选地,所述创建固定内存池包括:

读取配置文件,根据所述配置文件确定所述固定内存池的大小;

从系统中申请所述大小的内存作为固定内存池。

可选地,所述固定内存池采用数组加链表的方式进行构造,空闲连接链表中的成员指向下一个空闲的成员,使用连接链表中的成员指向下一个使用中的成员。

可选地,所述从预先创建的动态内存池中申请所需要的内存以存放传输数据包括:

判断所述动态内存池中的内存大小是否不小于所有并发连接所需要的内存大小;

如果是,则从所述动态内存池中申请所需要的内存以存放传输数据;

如果否,则触发从系统调用内存的操作,对所述动态内存池的大小进行扩充,直到所述动态内存池中的内存大小不小于所有并发连接所需要的内存大小,从所述动态内存池中申请所需要的内存以存放传输数据。

可选地,在所述从预先创建的固定内存池中获取固定内存以存放连接信息之后还包括:

当连接关闭时,将申请的所述固定内存释放到所述固定内存池中。

可选地,在所述从预先创建的动态内存池中申请所需要的内存以存放传输数据之后还包括:

在数据传输完成后,将申请的内存释放到所述动态内存池中。

为解决上述技术问题,本发明还提供了一种接入服务器,所述接入服务器包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的接入服务器内存管理优化程序,所述接入服务器内存管理优化程序被所述处理器执行时实现前述公开的任一种所述的接入服务器内存管理优化方法。

为解决上述技术问题,本发明还提供了一种通信系统,包括用户受控设备、管理服务器以及如前述公开的接入服务器。

为解决上述技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有接入服务器内存管理优化程序,所述接入服务器内存管理优化程序可被一个或者多个处理器执行,以实现前述公开的任一种所述的接入服务器内存管理优化方法。

本发明所提供的接入服务器内存管理优化方法,通过接入服务器接收用户受控设备发送的请求,建立通信连接;从预先创建的固定内存池中获取固定内存以存放连接信息;在通过建立的连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。本申请中所需要的内存都从预先建立的内存池中获取得到,不需要每一次都通过系统调用获取得到,降低了触发系统调用的几率,从而大大降低了系统的开销,避免了拖慢系统运行速度的问题。此外,本申请还提供了一种接入服务器、通信系统以及计算机可读存储介质,同样具有上述技术效果。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为接入服务器的连接示意图;

图2为接入服务器的通信过程示意图;

图3为本申请所提供的接入服务器内存管理优化方法的流程图;

图4为本申请所提供的接入服务器内存管理优化方法的另一种具体实施方式流程图;

图5为本实施例所提供的固定内存池构造示意图;

图6为本申请所提供的接入服务器内存管理优化方法的又一种具体实施方式流程图;

图7为本申请所提供的接入服务器的结构框图;

图8为本申请所提供的通信系统的结构框图。

具体实施方式

现有的接入服务器方案根据实际使用需求申请需要使用到的内存,每次申请内存都需要从系统调用,极大的增加了系统的开销,拖慢了系统的运行速度。本发明的核心是提供一种接入服务器内存管理优化方案,以解决上述技术问题。

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

本发明提供了一种接入服务器内存管理优化方法,参见图3本申请所提供的接入服务器内存管理优化方法的流程图所示,所述方法包括:

步骤s101:接收用户受控设备发送的请求,建立通信连接;

通过接入服务器接收用户受控设备发送的请求,从而建立与用户受控设备间的通信连接。其中,建立通信连接的过程可以为基于tcp(transmissioncontrolprotocol传输控制协议)建立与用户受控设备的tcp连接。请求可以为受控、上报、保活请求,在此不做限定。接入服务器接收该请求,建立通信连接,执行后续步骤。

步骤s102:从预先创建的固定内存池中获取固定内存以存放连接信息;

本实施例中,预先创建用于存放连接信息的固定内存池。固定内存池的大小为根据配置文件预先申请得到,在运行过程中固定内存池的大小不会发生改变。在接入服务器与用户受控设备建立连接时,需要从固定内存池中获取固定内存,用以存放连接信息。连接信息为本次通信连接的基本信息,可以包括但不限于连接描述符、事件驱动结构等信息。

作为一种具体实施方式,固定内存池的创建过程可以为:读取配置文件,根据所述配置文件确定所述固定内存池的大小;从系统中申请所述大小的内存作为固定内存池。配置文件中包含固定内存池的设定大小,在程序启动或系统初始化时,读取预设的配置文件,从而确定配置文件中固定内存池的大小后,从系统内存中申请相应的内存容量作为固定内存池。

步骤s103:在通过建立的连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。

动态内存池用于存放传输数据,动态内存池的大小可以根据传输数据的并发大小,进行动态调整。在建立的连接进行数据传输时,从预先创建的动态内存池中申请内存,用以存放通信过程中的传输数据。需要指出的是,本申请中动态内存池可以为整个进程共享的,能够最大化复用内存。

本发明所提供的接入服务器内存管理优化方法,通过接入服务器接收用户受控设备发送的请求,建立通信连接;从预先创建的固定内存池中获取固定内存以存放连接信息;在通过建立的连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。本申请中所需要的内存都从预先建立的内存池中获取得到,不需要每一次都通过系统调用获取得到,降低了触发系统调用的几率,从而大大降低了系统的开销,避免了拖慢系统运行速度的问题。

现有接入服务器根据实际需求申请需要使用到的内存,而由于每条连接上的请求数据大小并不都是一样大小的,这样会导致有时申请内存很大,有时申请内存又很小,很容易导致内存碎片化。在程序长期运行后,系统存在大量的内存碎片难以回收利用,极大的增加了系统开销,拖慢了系统速度。为此,在上述实施例的基础上,本申请中动态内存池中的内存单元为固定大小的内存块,在从所述动态内存池中申请所需要的内存以存放传输数据时,具体根据所需要的内存的大小,从所述动态内存池中申请对应数量的内存单元以存放传输数据。如图4本申请所提供的接入服务器内存管理优化方法的另一种具体实施方式流程图所示,该方法具体包括:

步骤s201:接收用户受控设备发送的请求,建立通信连接;

步骤s202:从预先创建的固定内存池中获取固定内存以存放连接信息;

步骤s203:在通过建立的连接进行数据传输时,根据所需要的内存的大小,从预先创建的动态内存池中申请对应数量的内存单元以存放传输数据,所述内存单元为固定大小的内存块。

本实施例中,根据当前通信连接所传输的数据确定需要的内存大小,根据需要内存的大小确定所需内存单元的数量。内存单元的数量的计算具体为:将所需内存的大小除以每个内存单元的大小,得到的数值取值后再加1。

现有接入服务器采用c库内存管理机制,在申请相对小内存时得到较大的内存,导致存储空间浪费,内存碎片化严重;而在真正需要申请较大内存时,需要重新申请,导致系统开销较大,耗时长。例如,申请1k的内存时,可能会申请到1m的内存,造成内存的浪费,若此时又需要申请1k的内存时,需要重新从系统中申请1m。

而本实施例中,内存单元为预设的固定大小的内存块,具体的大小可以根据实际实施场景进行设定,例如,将大小设定为1k,若申请1.2k内存,则分配两块内存单元,从而每次内存申请过程最多造成1k的内存浪费。本申请中所需要的内存都从预先建立的内存池中获取得到,不需要每一次都通过系统调用获取得到,降低了触发系统调用的几率,从而大大降低了系统的开销,避免了拖慢系统运行速度的问题。进一步地,本实施例动态内存池大小发生改变(如增长或收缩)时,将以内存单元进行增长或收缩,避免了内存碎片的产生,进一步降低了系统的开销,避免了内存碎片较多导致系统运行速度慢的问题。

在上述任一实施例的基础上,作为一种优选方式,本实施例中固定内存池采用数组加链表的方式进行构造,如图5本实施例所提供的固定内存池构造示意图所示,空闲连接链表中的成员指向下一个空闲的成员,使用连接链表中的成员指向下一个使用中的成员。

需要说明的是,固定内存池整体采用数组的形式将池中所有连接进行保存,数组中每个成员都含有指向下一成员的指针。进一步地,固定内存池中的连接分成使用中连接和空闲连接,本实施例为使用中连接和空闲连接分别建立相应的链表,即,使用连接链表和空闲连接链表,使用连接链表中,每个成员的指针用于指向下一个使用中成员;空闲连接链表中,每个成员的指针用于指向下一个空闲成员。在具体实施中,获取通信连接时,从空闲连接链表取出相应的成员放入使用连接链表中。

如图6本申请所提供的接入服务器内存管理优化方法的又一种具体实施方式流程图所示,该方法包括:

s301:接收用户受控设备发送的请求,建立通信连接;

s302:从预先创建的固定内存池中获取固定内存以存放连接信息;

s303:在通过建立的连接进行数据传输时,判断预先创建的动态内存池中的内存大小是否不小于所有并发连接所需要的内存大小;

s304:如果是,则从所述动态内存池中申请所需要的内存以存放传输数据;

本实施例中,在建立通信连接后,通过建立的通信连接进行数据传输,此时需要从动态内存池中申请内存用于存放传输数据。在申请内存之前,本实施例预先判断动态内存池中的内存大小是否不小于所有并发连接所需要的内存大小。若动态内存池中的内存大小大于等于所有并发连接所需要的内存大小,则表征当前动态内存池满足当前通信连接过程中数据的存储,此时启动从动态内存池中申请所需要的内存的步骤,实现数据的存放。

s305:如果否,则触发从系统调用内存的操作,对所述动态内存池的大小进行扩充,直到所述动态内存池中的内存大小不小于所有并发连接所需要的内存大小,从所述动态内存池中申请所需要的内存以存放传输数据。

可以理解的是,若动态内存池中的内存大小小于所有并发连接所需要的内存大小,则需要对动态内存池的大小进行扩充,触发从系统调用内存的操作,直至动态内存池中的内存大小扩充至所有并发连接所需要的内存大小后,启动从动态内存池中申请所需要的内存的步骤。

在上述任一实施例的基础上,本申请所提供的接入服务器内存管理优化方法,在从预先创建的固定内存池中获取固定内存以存放连接信息之后还包括:当连接关闭时,将申请的所述固定内存释放到所述固定内存池中。

同样地,在从动态内存池中申请所需要的内存以存放传输数据之后还包括:在数据传输完成后,将申请的内存释放到所述动态内存池中。可以理解的是,本实施例在当前通信连接关闭后,将申请的固定内存释放至固定内存池中,并在数据传输完成后,将申请的内存释放至动态内存池中,实现内存的回收利用。

在固定内存池采用数组加链表的方式进行构造时,内存的释放过程具体为:取出使用连接链表中的连接成员,并存入空闲连接链表中进行汇总。

此外,本发明还公开供了一种接入服务器1,如图7所示,所述接入服务器1包括存储器11、处理器12以及总线13,所述存储器11上存储有可在所述处理器12上运行的接入服务器内存管理优化程序,所述接入服务器内存管理优化程序被所述处理器12执行时实现如下步骤:

接收用户受控设备发送的请求,建立通信连接;从预先创建的固定内存池中获取固定内存以存放连接信息;在通过建立的通信连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:创建固定内存池,所述固定内存池用于存放连接信息;创建动态内存池,所述动态内存池用于存放传输数据。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:根据所需要的内存的大小,从所述动态内存池中申请对应数量的内存单元以存放传输数据,所述内存单元为固定大小的内存块。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:读取配置文件,根据所述配置文件确定所述固定内存池的大小;从系统中申请所述大小的内存作为固定内存池。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:所述固定内存池采用数组加链表的方式进行构造,空闲连接链表中的成员指向下一个空闲的成员,使用连接链表中的成员指向下一个使用中的成员。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:判断所述动态内存池中的内存大小是否不小于所有并发连接所需要的内存大小;如果是,则从所述动态内存池中申请所需要的内存以存放传输数据;如果否,则触发从系统调用内存的操作,对所述动态内存池的大小进行扩充,直到所述动态内存池中的内存大小不小于所有并发连接所需要的内存大小,从所述动态内存池中申请所需要的内存以存放传输数据。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:在所述从所述固定内存池中获取固定内存以存放连接信息之后,当连接关闭时,将申请的所述固定内存释放到所述固定内存池中。

可选地,所述接入服务器内存管理优化程序被所述处理器12执行时实现:在从所述动态内存池中申请所需要的内存以存放传输数据之后,在数据传输完成后,将申请的内存释放到所述动态内存池中。

其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是接入服务器1的内部存储单元,例如该接入服务器1的硬盘。存储器11在另一些实施例中也可以是接入服务器1的外部存储设备,例如接入服务器1上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器11还可以既包括接入服务器1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于接入服务器1的应用软件及各类数据,例如接入服务器内存管理优化程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。

处理器12在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行接入服务器内存管理优化程序等。

该总线13可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

进一步地,接入服务器1还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该接入服务器1与其他电子设备之间建立通信连接。

可选地,该接入服务器1还可以包括用户接口,用户接口可以包括显示器(display)、输入单元比如键盘(keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在接入服务器1中处理的信息以及用于显示可视化的用户界面。

图7仅示出了具有组件11-13的接入服务器1,本领域技术人员可以理解的是,图7示出的结构并不构成对接入服务器1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

此外,本申请还提供了一种通信系统,如图8所示,该系统具体包括用户受控设备2、管理服务器3以及上述任一种所述的接入服务器1。本申请实施例所提供的接入服务器可参考上述实施例部门的内容,在此不再赘述。

本申请通过接入服务器接收用户受控设备发送的请求,建立通信连接;从预先创建的固定内存池中获取固定内存以存放连接信息;在通过建立的连接进行数据传输时,从预先创建的动态内存池中申请所需要的内存以存放传输数据。本申请中所需要的内存都从预先建立的内存池中获取得到,不需要每一次都通过系统调用获取得到,降低了触发系统调用的几率,从而大大降低了系统的开销,避免了拖慢系统运行速度的问题。

此外,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有接入服务器内存管理优化程序,所述接入服务器内存管理优化程序可被一个或者多个处理器执行,以实现上述任一种所述的接入服务器内存管理优化方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1