一种多线程管理方法及装置制造方法

文档序号:6516901阅读:146来源:国知局
一种多线程管理方法及装置制造方法
【专利摘要】本发明公开了一种多线程管理方法及装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,方法包括:在主线程接受客户端的连接请求之后,将客户端的相关信息封装成处理任务;主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。通过本发明的实施例能够避免主线程向工作线程分配任务时对系统资源的浪费。
【专利说明】一种多线程管理方法及装置
【技术领域】
[0001]本发明属于计算机【技术领域】,尤其涉及一种多线程管理方法及装置。
【背景技术】
[0002]很多软件为了充分发挥多核CPU (中央处理器)的性能,其架构使用了多进程或多线程模式,多线程与多进程相比,因为所有线程同处于一个地址空间,在共享资源上有天然的优势,所以大部分软件使用多线程模式。在多线程模式中,往往有主线程和工作线程之分,其中主线程只有一个,用来接收客户端的连接,然后将待处理的任务分配给工作线程,会有多个工作线程接收主线程的任务分配命令,来具体处理客户端的请求。
[0003]然而,在现有技术中,当主线程向工作线程分配任务时,往往所有的工作线程都会从睡眠状态中被激活,然而只有其中一个工作线程可以获取到处理任务并进行相应的处理,而其他工作线程则继续睡眠。由于大部分的工作线程会经历由睡眠到被唤醒,再到睡眠的过程,导致现有技术中主线程向工作线程分配任务时,会浪费大量的系统资源。

【发明内容】

[0004]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的多线程管理方法及装置,避免系统资源的浪费。
[0005]依据本发明的实施例的一个方面,提供了一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,方法包括:在主线程接受客户端的连接请求之后,将客户端的相关信息封装成处理任务;主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;主线程激活选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0006]可选地,在主线程接受客户端的连接请求之前,方法还包括:在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列;每个工作线程监听与其对应的文件描述符上的读事件,主线程监听客户端的连接请求。
[0007]可选地,预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
[0008]可选地,主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中的步骤为:主线程将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。
[0009]可选地,主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理的步骤包括:主线程向选择的工作线程对应的文件描述符发送消息,以激活所选择的工作线程;在选择的工作线程在收到对应的文件描述符上的读事件后,从选择的工作线程的任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0010]依据本发明的另一个方面,还提供了一种多线程管理装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,装置包括:封装模块,用于在主线程接受客户端的连接请求之后,控制主线程将客户端的相关信息封装成处理任务;选择模块,用于控制主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;写入模块,用于控制主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;激活模块,用于控制主线程激活所选择的工作线程,并控制所选择的工作线程从其任务队列中取出处理任务,并由选择的工作线程根据处理任务进行相应的处理。
[0011]可选地,装置还包括:生成模块,用于在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列;监听模块,用于控制每个工作线程监听与其对应的文件描述符上的读事件,以及控制主线程监听客户端的连接请求。
[0012]可选地,预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
[0013]可选地,写入模块进一步用于将封装得到的处理任务写入到所选择的工作线程模块的任务队列的队尾。
[0014]可选地,激活模块包括:激活单元,用于控制主线程向所选择的工作线程对应的文件描述符发送消息,以激活所选择的工作线程;处理单元,用于控制所选择的工作线程在收到对应的文件描述符上的读事件后,从所选择的工作线程的任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0015]由上述技术方案可知,在本发明的实施例中具有下面有益效果:
[0016]I)在本发明的实施例中,主线程可以根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程,然后主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中,也就是主线程分配任务时,一次只激活一个工作线程,不再存在工作线程的无谓唤醒-再睡眠,避免了主线程向工作线程分配任务是对系统资源的浪费。
[0017]2)在本发明的实施例中,主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理,即每个工作线程只从自己的队列里读取处理任务,避免多个工作线程对全局任务队列的争用,提高并发度。
[0018]3)在本发明的实施例中,主线程可以根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程,例如主线程在分配任务时,可以分配给当前任务队列长度最短或负载最轻的工作线程,有助于维持各个工作线程的负载均衡。
[0019]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
【专利附图】

【附图说明】
[0020]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0021]图1示出了现有技术中多线程应用程序中的线程模型的示意图;
[0022]图2示出了根据本发明一个实施例的多线程管理方法的流程图;
[0023]图3示出了根据本发明一个实施例的多线程应用程序中的线程模型的示意图;以及
[0024]图4示出了根据本发明一个实施例的多线程管理装置的结构框图。
【具体实施方式】
[0025]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0026]如图1所示,为现有技术中多线程应用程序中的线程模型,该多线程应用程序包括一个主线程和三个工作线程(例如工作线程1、工作线程2和工作线程3),程序里有一个文件描述符fd (file descriptor),主线程可以用该文件描述符fd把处理任务分配给工作线程,所有的工作线程(工作线程1、工作线程2和工作线程3)都可以监听文件描述符fd上的读事件。
[0027]主线程在启动后就可以监听客户端的连接,当有客户端发起连接后,主线程接受该连接,该主线程可以将客户端的相关信息封装成一个格式为CON包(Concurrent包)格式的处理任务,把CON包放入一个全局任务队列(即所有的工作线程共用一个任务队列)里。然后主线程向文件描述符fd发送消息,该消息会使得监听文件描述符fd的三个工作线程都接收到读事件。工作线程收到读事件即代表主线程有处理任务要分配给工作线程,于是工作线程从全局任务队列里将CON包取出,根据CON包里的内容去进行相应的处理。然而,在主线程向文件描述符fd发送消息时,所有的工作线程(工作线程1、工作线程2和工作线程3)都会收到读事件,从而所有的工作线程从睡眠状态被激活,然后都去全局任务队列里取CON包,但只有一个工作线程能取到CON包并进行处理,其他的工作线程继续睡眠,此即所谓“惊群”现象,该现象会造成无谓的系统开销。
[0028]下面结合图2来说明根据本发明一个实施例的、适于解决上述技术问题的多线程管理方法的流程图,该方法适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程。
[0029]如图2所示,方法200始于步骤S201,在步骤S201中,在主线程接受客户端的连接请求之后,主线程将客户端的相关信息封装成处理任务。
[0030]在本发明的实施例中,主线程负责监听客户端的连接请求,在主线程监听到并接受客户端的连接请求之后,主线程可以将客户端的相关信息,例如客户端的地址信息、来自客户端的指令信息等,封装成格式为预先设定的数据结构的处理任务,该主线程可以通过处理任务向工作线程分配任务,来具体处理客户端的请求。可选地,在本发明的实施例中,预先设定的数据结构为CON包的结构,当然也并不限于此。
[0031]随后,在步骤S203中,主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程。[0032]可选地,在本发明的实施例中,预先设定的工作线程选择策略包括:
[0033](I)根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程。例如:工作线程I的任务队列中包括三个处理任务,则可以理解为该工作线程I的任务队列的长度为3,工作线程2的任务队列中包括四个处理任务,则可以理解为工作线程2的任务队列的长度为4,如果将工作线程I的任务队列的长度与工作线程2的任务队列的长度进行比较的话,可知工作线程I的任务队列的长度最短。因此,主线程可以根据预先设定的工作线程选择策略选择工作线程I。或者
[0034](2)根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
[0035]在现有技术中,由于没有考虑各个工作线程当前的负载情况,而只依靠多个工作线程去争取全局任务队列的处理任务,从而造成各个工作线程的负载不均衡。而在本发明的实施例中,主线程在分配任务时,可以将任务分配给当前任务队列最短,或者负载最轻的工作线程,以有助于维持各个工作线程的负载均衡。
[0036]随后,在步骤S205中,主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中。
[0037]在现有技术中,由于有大量的客户端会频繁向主线程发送连接请求,主线程的任务分配操作也会比较快,会频繁向全局任务队列写入处理任务,工作线程也要频繁地从全局任务队列中取出处理任务,然而多个工作线程对同一个任务队列中的处理任务同时进行操作,很容易造成数据的不一致,为了避免数据的不一致,在现有技术中,必须在读写操作之前对处理任务加锁,在操作完成后解锁,由此会导致线程并发度较低,程序运行效率不闻。
[0038]而在本发明的实施例中,每个工作线程都有自己的任务队列,主线程在分配任务时,可以只向所选择的工作线程(例如一个工作线程)的任务队列中写入处理任务,使得被分配任务的工作线程可以从自己的任务队列中读取处理任务,避免了多个工作线程对任务队列的争用,提高了线程的并发度。
[0039]可选地,在本发明的实施例中,主线程可以将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。如图3所示,在工作线程I的任务队列中最右侧的CON包位于任务队列的队尾。
[0040]随后,在步骤S207中,主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0041]在本发明的实施例中,线程可以向所选择的工作线程对应的文件描述符发送消息(例如单字节消息),以激活所选择的工作线程;所选择的工作线程收到对应的文件描述符上的读事件后,从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0042]在本发明的实施例中,每个工作线程可以具有与该工作线程对应的文件描述符,每个工作线程监听与其对应的文件描述符上的读事件,主线程在分配任务时,可以只向一个文件描述符发送单字节消息,也就是只有一个工作线程被激活,从而避免了现有技术中工作线程“惊群”的现象。
[0043]可选地,在本发明的实施例中,在步骤S201之前,方法200还包括:步骤S209和步骤 S210。
[0044]在步骤S209中,在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列。
[0045]文件描述符在形式上可以是一个非负整数。该文件描述符相当于是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
[0046]参见图3,工作线程I具有与其对应的文件描述符fdl和任务队列;工作线程2具有与其对应的文件描述符fd2和任务队列;工作线程3具有与其对应的文件描述符fd3和任务队列。
[0047]随后,在步骤S210中,每个工作线程监听与其对应的文件描述符上的读事件,主线程监听客户端的连接请求。如果主线程监听到客户的连接请求,并且在主线程接受客户端的连接请求之后,则可以进入步骤S201。
[0048]在本发明的实施例中,文件描述符上的事件类型可以包括:读事件、写事件、注册事件、修改事件等。
[0049]需要说明的是,图2所示的方法并不限定按所示的各步骤的顺序进行,可以根据需要调整各步骤的先后顺序,另外,所述步骤也不限定于上述步骤划分,上述步骤可以进一步拆分成更多步骤也可以合并成更少步骤。
[0050]下面结合图3所示的本发明实施例中的多线程应用程序中的线程模型来介绍多线程管理方法,其中,依据该实施例的多线程应用程序包括一个主线程和三个工作线程(例如工作线程1、工作线程2和工作线程3),每一个工作线程都有对应的文件描述符fd(filedescriptor),工作线程I与文件描述符fdl对应,工作线程2与文件描述符fd2对应,工作线程3与文件描述符3对应。主线程可以用文件描述符把处理任务分配给相应的工作线程,每个工作线程可以监听与其对应的文件描述符fd上的读事件。
[0051]该多线程管理方法的具体过程如下:在主线程接受客户端的连接请求之后,可以将客户端的相关信息封装成格式为CON包格式的处理任务(以CON表示),主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程,例如选择工作线程2 ;主线程将封装得到CON结构写入到所选择的工作线程2的任务队列中;主线程可以向工作线程2对应的文件描述符fd2发送单字节消息,以激活工作线程2 ;在工作线程2收到对应的文件描述符fd2上的读事件后,从其任务队列的队尾处中取出CON结构,并由工作线程2根据处理任务进行相应的处理。
[0052]下面结合图4说明根据本发明一个实施例、适于解决上述技术问题的一种多线程管理装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程。
[0053]如图4所示,根据本发明的实施例的多线程管理装置400可以主要包括:封装模块401、选择模块403、写入模块405和激活模块407。应当理解,图4中所表示的各个模块的连接关系仅为示例,本领域技术人员完全可以采用其它的连接关系,只要在这样的连接关系下各个模块也能够实现本发明的功能即可。
[0054]在本说明书中,各个模块的功能可以通过使用专用硬件、或者能够与适当的软件相结合来执行处理的硬件来实现。这样的硬件或专用硬件可以包括专用集成电路(ASIC)、各种其它电路、各种处理器等。当由处理器实现时,该功能可以由单个专用处理器、单个共享处理器、或者多个独立的处理器(其中某些可能被共享)来提供。另外,处理器不应该被理解为专指能够执行软件的硬件,而是可以隐含地包括、而不限于数字信号处理器(DSP)硬件、用来存储软件的只读存储器(ROM)、随机存取存储器(RAM)、以及非易失存储设备。
[0055]在本发明的实施例中,封装模块401用于在主线程接受客户端的连接请求之后,控制主线程将客户端的相关信息封装成处理任务。在本发明的实施例中,主线程负责监听客户端的连接请求,在主线程监听到并接受客户端的连接请求之后,封装模块401可以控制主线程将客户端的相关信息,例如客户端的地址信息、来自客户端的指令信息等,封装成格式为预先设定的数据结构的处理任务。可选地,在本发明的实施例中,预先设定的数据结构为CON包的结构,当然也并不限于此。
[0056]在本发明的实施例中,选择模块403用于控制主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程。
[0057]可选地,在本发明的实施例中,预先设定的工作线程选择策略包括:
[0058](I)根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程。例如:工作线程I的任务队列中包括三个处理任务,则可以理解为该工作线程I的任务队列的长度为3,工作线程2的任务队列中包括四个处理任务,则可以理解为工作线程2的任务队列的长度为4,如果将工作线程I的任务队列的长度与工作线程2的任务队列的长度进行比较的话,可知工作线程I的任务队列的长度最短。因此,主线程可以根据预先设定的工作线程选择策略选择工作线程I。或者
[0059](2)根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
[0060]在现有技术中,由于没有考虑各个工作线程当前的负载情况,而只依靠多个工作线程去争取全局任务队列的处理任务,从而造成各个工作线程的负载不均衡。而在本发明的实施例中,主线程在分配任务时,可以将任务分配给当前任务队列最短,或者负载最轻的工作线程,以有助于维持各个工作线程的负载均衡。
[0061]在本发明的实施例中,写入模块405用于控制主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中。
[0062]在现有技术中,由于有大量的客户端会频繁向主线程发送连接请求,主线程的任务分配操作也会比较快,会频繁向全局任务队列写入处理任务,工作线程也要频繁地从全局任务队列中取出处理任务,然而多个工作线程对同一个任务队列中的处理任务同时进行操作,很容易造成数据的不一致,为了避免数据的不一致,在现有技术中,必须在读写操作之前对处理任务加锁,在操作完成后解锁,由此会导致线程并发度较低,程序运行效率不闻。
[0063]而在本发明的实施例中,每个工作线程都有自己的任务队列,主线程在分配任务时,写入模块405可以控制主线程只向所选择的工作线程(例如一个工作线程)的任务队列中写入处理任务,使得被分配任务的工作线程可以从自己的任务队列中读取处理任务,避免了多个工作线程对任务队列的争用,提高了线程的并发度。
[0064]可选地,在本发明的实施例中,写入模块405可以控制主线程将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。如图3所示,在工作线程I的任务队列中最右侧的CON包位于任务队列的队尾。
[0065]在本发明的实施例中,激活模块407用于控制主线程激活所选择的工作线程,并控制所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0066]可选地,在本发明的实施例中,激活模块407包括:激活单元和处理单元,其中激活单元用于控制主线程向选择的工作线程对应的文件描述符发送消息,以激活所选择的工作线程;处理单元用于控制所选择的工作线程在收到对应的文件描述符上的读事件后,从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
[0067]在本发明的实施例中,每个工作线程可以具有与该工作线程对应的文件描述符,每个工作线程监听与其对应的文件描述符上的读事件,主线程在分配任务时,可以只向一个文件描述符发送单字节消息,也就是只有一个工作线程被激活,从而避免了现有技术中“惊群”现象。
[0068]可选地,在本发明的实施例中,装置400还包括:生成模块409和监听模块410,其中生成模块用于在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列。参见图3,工作线程I具有与其对应的文件描述符fdl和任务队列;工作线程2具有与其对应的文件描述符fd2和任务队列;工作线程3具有与其对应的文件描述符fd3和任务队列。监听模块用于控制每个工作线程监听与其对应的文件描述符上的读事件,以及控制主线程监听客户端的连接请求。
[0069]在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0070]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0071]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0072]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代替。
[0073]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0074]本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的多线程控制的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0075]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干设备的单元权利要求中,这些设备中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
【权利要求】
1.一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,所述方法包括: 在所述主线程接受客户端的连接请求之后,将所述客户端的相关信息封装成处理任务; 所述主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程; 所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中; 所述主线程激活所述所选择的工作线程,由所述所选择的工作线程从其任务队列中取出所述处理任务,并由所述所选择的工作线程根据所述处理任务进行相应的处理。
2.根据权利要求1所述的方法,在所述主线程接受客户端的连接请求之前,所述方法还包括: 在所述主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列; 每个工作线程监听与其对应的文件描述符上的读事件,所述主线程监听客户端的连接请求。
3.根据权利要求1 或2所述的方法,其中,所述预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
4.根据权利要求1~3任一项所述的方法,其中,所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中的步骤为: 所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。
5.根据权利要求1~4任一项所述的方法,其中,所述主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理的步骤包括: 所述主线程向所述所选择的工作线程对应的文件描述符发送消息,以激活所述所选择的工作线程; 在所述所选择的工作线程在收到对应的文件描述符上的读事件后,从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
6.一种多线程管理装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,所述装置包括: 封装模块,用于在所述主线程接受客户端的连接请求之后,控制所述主线程将所述客户端的相关信息封装成处理任务; 选择模块,用于控制所述主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程; 写入模块,用于控制所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中; 激活模块,用于控制所述主线程激活所述所选择的工作线程,并控制所述所选择的工作线程从其任务队列中取出所述处理任务,并由所述所选择的工作线程根据所述处理任务进行相应的处理。
7.根据权利要求6所述的装置, 所述装置还包括: 生成模块,用于在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列; 监听模块,用于控制每个工作线程监听与其对应的文件描述符上的读事件,以及控制所述主线程监听客户端的连接请求。
8.根据权利要求6或7所述的装置,其中,所述预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。
9.根据权利要求6~8任一项所述的装置,其中,所述写入模块进一步用于将封装得到的处理任务写入到所选择的工作线程模块的任务队列的队尾。
10.根据权利要求6~9任一项所述的装置,其中,所述激活模块包括: 激活单元,用于控制所述主线程向所述所选择的工作线程对应的文件描述符发送消息,以激活所述所选择的工作线程; 处理单元,用于控制所述所选择的工作线程在收到对应的文件描述符上的读事件后,从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。
【文档编号】G06F9/50GK103605568SQ201310519950
【公开日】2014年2月26日 申请日期:2013年10月29日 优先权日:2013年10月29日
【发明者】朱超, 陈飞, 王超 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1