基于多核、多线程实现AP和STA的接入方法
技术领域
本发明涉及网络通信技术领域,尤其涉及在多核网络处理器环境下,使用多线程编程技术实现AP和STA的接入管理处理方法。
背景技术
当今社会,人们的生活方式正在发生着巨大的改变。人与人之间的交互越来越依赖于通讯网络,而无线局域网由于其可移动性、使用方便、部署便捷、性价比高、智能终端普遍支持等优点,已经广泛应用到了园区、公共场所、高校、企业、医院、酒店、餐馆等环境中。随着园区、公共场所、高校、企业、医院、酒店、餐馆等环境中无线局域网的广泛部署,AP和STA数量的不断增多,要求处理器的处理能力也越来越高。但对于传统的单核处理器来说,性能的提升主要依赖于主频的提高,但这无论在性价比还是性能功耗比方面都遭遇到令市场无法接受的发展瓶颈。故通过增加处理器核的个数来获取处理性能的提高比通过提高主频实现要容易的多。另外传统的编程方法采用的是单线程,处理串行化,效率较低,浪费资源。而如何利用多核处理器,采用多线程编程技术提高AP和STA的接入处理效率,对AP和STA进行有效的管理就是本文探讨的问题。
单核单线程处理方法,即在单核的处理器上,程序是串行执行的,在程序运行期间,由单个线程独占处理器的控制权,负责执行所用任务。在这种情况下,程序在执行一些耗时的任务时,无法对用户的操作及时响应,从而影响执行效率,并且也达不到系统的实际性能要求。
单核多线程处理方法,即在单核的处理器上,同时运行两个或多个线程,这样允许在程序中并发执行多个指令流,每个指令流互相独立,是并发的,也就是在逻辑上“同时”,但实际上由于是单核的,故在某一时间点也只有一个线程在执行。多线程与传统的单线程相比,由于各个线程的 控制流是彼此独立的,使得各个线程之间的代码是乱序执行的,由此会带来线程调度,同步等问题,而解决数据同步问题,一般需要引入加减锁机制,但加减锁本身也占用了一定的开销,如加减锁过多,反而导致程序处理速度变的更慢,性能更低。
多核单线程处理方法,即在多核的处理器上,只能在一个核上运行一个线程,不能充分利用处理器多核的性能优势,会导致处理器的资源闲置,造成了极大的浪费。
多核多线程处理方法,即在多核的处理器上,同时运行多个线程,这样每个核都可以同时多个线程,最大限度地利用了处理器的性能优势,但也存在线程调度、同步等问题。
关键名词
WLAN:无线局域网,利用射频(RF)技术,取代旧式的双绞线构成局域网络,提供传统有线局域网的所有功能。
AC:无线接入控制器,负责把来自不同AP的数据进行汇聚并接入Internet,同时完成AP设备的配置管理,无线用户的认证、管理及宽带访问、安全等控制功能。
AP:无线访问节点,用于无线网络的无线交换机,移动计算机用户进入有线网络的接入点,主要用于宽带家庭、大楼内部以及园区内部,典型举例覆盖几十米之外上百米。
STA:WLAN中的客户端,可以是装有无线网卡的计算机,也可以是有WiFi模块的智能手机。可以是移动的,也可以是固定的,是无线局域网的最基本组成单位。
线程:程序独立调度和分派的基本单位,程序执行流的最小单位,可并发执行。
发明内容
本发明为了解决现有技术中存在的问题,提供了一种基于多核、多线程实现AP和STA的接入方法。
为了实现上述的目的,本发明的技术方案是:基于多核、多线程实现 AP和STA的接入方法,包括以下步骤:
步骤A:设置处理AP消息线程的个数和STA消息线程的个数;
步骤B:在程序初始化的线程里,根据步骤A确定的处理AP消息线程的个数和处理STA消息的线程个数,依次创建处理AP消息的线程和处理STA消息的线程,并初始化每个处理AP消息线程的消息队列和处理STA消息线程的消息队列;
步骤C:当主入口接收信息线程接收到外部消息后,如果判断为AP消息,则将其发送到AP消息线程的消息队列中;如果判断为STA消息,则将其发送到STA消息线程的消息队列中;
步骤D:处理AP消息的线程从此线程对应的消息队列中取出待处理的消息,然后按照AP上线逻辑的处理,完成AP的上线;处理STA消息的线程从该线程对应的消息队列中取出待处理的消息,然后按照STA上线逻辑的处理,完成STA的上线;
步骤E:当STA上线时,需要把STA信息记录到AP表中,当STA下线时,需要把STA信息从AP表中删除,把处理STA上下线消息的线程转化为处理AP消息的线程;
步骤F:当AP下线时,需要把此AP下记录的STA信息从AP表中删除,当处理AP下线导致STA下线消息时,把AP的线程转化为处理STA消息的线程。
优选的是,所述步骤C中,如果判断为AP消息,则根据消息内容获得AP信息唯一标识的MAC地址或IP地址,然后把AP信息的MAC地址或IP地址的末字节对处理AP消息的线程个数取余,获得的值作为处理此AP消息线程的数组下标,然后把此AP消息插入到这个数组下标对应的处理AP消息的线程的消息队列中去。
优选的是,所述步骤C中,如果判断为STA消息,根据消息内容获得STA唯一标识的MAC地址,然后把STA信息的MAC地址的末字节对处理STA消息的线程个数取余,获得的值作为处理此STA消息线程的数组下标,然后把此STA消息插入到这个数组下标对应的处理STA消息的线程的消息队列中去。
优选的是,所述步骤D中,处理AP消息的线程首先判断AP消息是否需要转化到STA线程中处理,如果是,将其转化为STA消息,分发到STA的消息队列中;处理STA消息的线程首先判断STA消息是否需要转化到AP线程中处理,如果是,将其转化为AP消息,分发到AP的消息队列中。
优选的是,在AP上线完成后,当从网管下发对AP的配置维护命令时,对其执行步骤C;在STA上线完成后,当从网管下发对STA的维护命令时,对其执行步骤C。
本发明提供的接入方法,充分地利用了处理器多核的资源优势,最大化地发挥了处理器的性能;根据处理器的核数合理分配处理线程个数,减少了线程调度消耗的资源,使得控制应用程序高效地运转;消息分发机制的多线程编程,有效地降低了由于多线程的竞争关系而引起的资源同步问题,从而避免了大量的加减锁的开销,提高了程序的执行效率;在AP消息与STA消息互相触发的时候,进行有效地线程相互转换,使得两者的实体在各自的线程中操作,互不干扰,提高了效率。
附图说明
图1示出了本发明接入方法的工作原理图。
具体实施方式
为了使本发明解决的技术问题、采用的技术方案、取得的技术效果易于理解,下面结合具体的附图,对本发明的具体实施方式做进一步说明。
参考图1,本发明提供了一种基于多核、多线程实现AP和STA的接入方法,具体步骤如下:
步骤A:设置处理AP消息线程的个数和STA消息线程的个数;根据处理器分配给此控制应用程序的核数以及要处理的AP消息数量与要处理的STA消息数量的比例,合理设置处理AP消息线程的个数和处理STA消息线程的个数,因为线程的调度本身也是需要消耗一定的资源的,故如果设置的线程数过多,会导致资源大量地消耗在线程的调度上,从而降低了 应用程序本身的性能。如果设置的线程数过少,又不能充分地利用处理器多核的资源,对于处理器的资源也是一种浪费。
步骤B:在程序初始化的线程里,根据步骤A确定的处理AP消息线程的个数和处理STA消息的线程个数,依次创建处理AP消息的线程和处理STA消息的线程,并初始化每个处理AP消息线程的消息队列和处理STA消息线程的消息队列;
步骤C:当主入口接收信息线程接收到外部消息后,如果判断为AP消息,则将其发送到AP消息线程的消息队列中;如果判断为STA消息,则将其发送到STA消息线程的消息队列中。
优选的是,所述步骤C中,如果判断为AP消息,则根据消息内容获得AP信息唯一标识的MAC地址或IP地址,然后把AP信息的MAC地址或IP地址的末字节对处理AP消息的线程个数取余,获得的值作为处理此AP消息线程的数组下标,然后把此AP消息插入到这个数组下标对应的处理AP消息的线程的消息队列中去。
如果判断为STA消息,根据消息内容获得STA唯一标识的MAC地址,然后把STA信息的MAC地址的末字节对处理STA消息的线程个数取余,获得的值作为处理此STA消息线程的数组下标,然后把此STA消息插入到这个数组下标对应的处理STA消息的线程的消息队列中去。
步骤D:处理AP消息的线程从此线程对应的消息队列中取出待处理的消息,然后按照AP上线逻辑的处理,完成AP的上线;处理STA消息的线程从该线程对应的消息队列中取出待处理的消息,然后按照STA上线逻辑的处理,完成STA的上线;
步骤E:当STA上线时,需要把STA信息记录到AP表中,当STA下线时,需要把STA信息从AP表中删除,这时候就存在,在处理STA消息的线程中操作了AP表的内容,与本身处理AP消息的线程存在多线程竞争关系,解决方法就是把处理STA上下线消息的线程转化为处理AP消息的线程;
步骤F:当AP下线时,需要把此AP下记录的STA信息从AP表中删除,这时候就存在,在处理AP消息的线程中操作了STA表的内容,与本 身处理STA消息的线程存在多线程竞争关系,就是在处理AP下线导致的STA下线消息的时候,把AP的线程转化为处理STA消息的线程。
在AP上线完成后,可能需要对AP进行一定的配置维护管理,当从网管下发对AP的配置维护命令时,同样需要根据消息内容获得AP的唯一标识MAC地址或IP地址,然后按照步骤C的处理方法进行处理;同理,在STA上线完成后,可能也需要对STA进行一定的维护管理,当从网管下发对STA的维护命令时,同样需要根据消息内容获得STA的唯一标识MAC地址,然后按照步骤C的处理方法进行处理。
进一步优选的是,所述步骤D中,处理AP消息的线程首先判断AP消息是否需要转化到STA线程中处理,如果是,将其转化为STA消息,分发到STA的消息队列中;处理STA消息的线程首先判断STA消息是否需要转化到AP线程中处理,如果是,将其转化为AP消息,分发到AP的消息队列中。
本发明的接入方法可应用于WlAN AC设备上,此控制应用程序属于AC的一个子程序,运行在多核的处理器上,包括四类线程:主线程1、主入口接收处理消息线程2、接收处理AP消息线程3、接收处理STA消息线程4。
其中主线程完成程序的初始化,包括AP和STA消息队列的初始化,及根据预先规划好的AP线程个数和STA线程个数,创建处理AP消息的线程和STA消息的线程。主入口接收处理消息线程,接收来自于外部的消息,当接收到的消息是AP消息时,通过解析消息内容,获得AP的MAC地址或IP地址,然后取其最后一个字节对处理AP消息的线程个数取余,获得的值作为消息分发到消息队列中的数组下标,分发完成后返回接收消息入口处,继续接收消息。同理,STA的消息处理流程也是一样的。当此消息既不是AP消息也不是STA消息的时候,返回接收消息入口处。接收处理AP消息线程,首先判断此AP消息队列中是否有需要处理的消息,如果有,取出消息进行处理,如果没有,那么返回接收消息入口处。如果有取出的AP消息,然后按照AP消息处理逻辑来处理,处理时需要判断此AP消息是否涉及到STA,如果涉及到STA表的操作,那么需要把此AP 消息转化为STA的消息,也按照一定的规则,把STA消息分发到对应的消息队列中去,分发完成后返回接收消息入口处。如果此AP消息不涉及到STA,那么处理完成后也返回接收消息入口处。接收处理STA消息线程,首先判断此STA消息队列中是否有需要处理的消息,如果有,取出消息进行处理,如果没有,那么返回接收消息入口处。如果有取出的STA消息,然后按照STA消息处理逻辑来处理,处理时需要判断此STA消息是否涉及到AP,如果涉及到AP表的操作,那么需要把此STA消息转化为AP的消息,也按照一定的规则,把STA消息分发到对应的消息队列中去,分发完成后返回接收消息入口处。如果此STA消息不涉及到AP,那么处理完成后也返回接收消息入口处。
本发明提供的接入方法,充分地利用了处理器多核的资源优势,最大化地发挥了处理器的性能;根据处理器的核数合理分配处理线程个数,减少了线程调度消耗的资源,使得控制应用程序高效地运转;消息分发机制的多线程编程,有效地降低了由于多线程的竞争关系而引起的资源同步问题,从而避免了大量的加减锁的开销,提高了程序的执行效率;在AP消息与STA消息互相触发的时候,进行有效地线程相互转换,使得两者的实体在各自的线程中操作,互不干扰,提高了效率。
本发明已通过优选的实施方式进行了详尽的说明。然而,通过对前文的研读,对各实施方式的变化和增加对于本领域的一般技术人员来说是显而易见的。申请人的意图是所有的这些变化和增加都落在了本发明权利要求所保护的范围中。