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

技术编号:9718624 阅读:128 留言:0更新日期:2014-02-27 05:18
本发明专利技术公开了一种多线程管理方法及装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,方法包括:在主线程接受客户端的连接请求之后,将客户端的相关信息封装成处理任务;主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。通过本发明专利技术的实施例能够避免主线程向工作线程分配任务时对系统资源的浪费。

【技术实现步骤摘要】
一种多线程管理方法及装置
本专利技术属于计算机
,尤其涉及一种多线程管理方法及装置。
技术介绍
很多软件为了充分发挥多核CPU (中央处理器)的性能,其架构使用了多进程或多线程模式,多线程与多进程相比,因为所有线程同处于一个地址空间,在共享资源上有天然的优势,所以大部分软件使用多线程模式。在多线程模式中,往往有主线程和工作线程之分,其中主线程只有一个,用来接收客户端的连接,然后将待处理的任务分配给工作线程,会有多个工作线程接收主线程的任务分配命令,来具体处理客户端的请求。然而,在现有技术中,当主线程向工作线程分配任务时,往往所有的工作线程都会从睡眠状态中被激活,然而只有其中一个工作线程可以获取到处理任务并进行相应的处理,而其他工作线程则继续睡眠。由于大部分的工作线程会经历由睡眠到被唤醒,再到睡眠的过程,导致现有技术中主线程向工作线程分配任务时,会浪费大量的系统资源。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的多线程管理方法及装置,避免系统资源的浪费。依据本专利技术的实施例的一个方面,提供了一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,方法包括:在主线程接受客户端的连接请求之后,将客户端的相关信息封装成处理任务;主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;主线程激活选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。可选地,在主线程接受客户端的连接请求之前,方法还包括:在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列;每个工作线程监听与其对应的文件描述符上的读事件,主线程监听客户端的连接请求。可选地,预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。可选地,主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中的步骤为:主线程将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。可选地,主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理的步骤包括:主线程向选择的工作线程对应的文件描述符发送消息,以激活所选择的工作线程;在选择的工作线程在收到对应的文件描述符上的读事件后,从选择的工作线程的任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。依据本专利技术的另一个方面,还提供了一种多线程管理装置,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,装置包括:封装模块,用于在主线程接受客户端的连接请求之后,控制主线程将客户端的相关信息封装成处理任务;选择模块,用于控制主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;写入模块,用于控制主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;激活模块,用于控制主线程激活所选择的工作线程,并控制所选择的工作线程从其任务队列中取出处理任务,并由选择的工作线程根据处理任务进行相应的处理。可选地,装置还包括:生成模块,用于在主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列;监听模块,用于控制每个工作线程监听与其对应的文件描述符上的读事件,以及控制主线程监听客户端的连接请求。可选地,预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。可选地,写入模块进一步用于将封装得到的处理任务写入到所选择的工作线程模块的任务队列的队尾。可选地,激活模块包括:激活单元,用于控制主线程向所选择的工作线程对应的文件描述符发送消息,以激活所选择的工作线程;处理单元,用于控制所选择的工作线程在收到对应的文件描述符上的读事件后,从所选择的工作线程的任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理。由上述技术方案可知,在本专利技术的实施例中具有下面有益效果:I)在本专利技术的实施例中,主线程可以根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程,然后主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中,也就是主线程分配任务时,一次只激活一个工作线程,不再存在工作线程的无谓唤醒-再睡眠,避免了主线程向工作线程分配任务是对系统资源的浪费。2)在本专利技术的实施例中,主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理,即每个工作线程只从自己的队列里读取处理任务,避免多个工作线程对全局任务队列的争用,提高并发度。3)在本专利技术的实施例中,主线程可以根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程,例如主线程在分配任务时,可以分配给当前任务队列长度最短或负载最轻的工作线程,有助于维持各个工作线程的负载均衡。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的【具体实施方式】。【附图说明】通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了现有技术中多线程应用程序中的线程模型的示意图;图2示出了根据本专利技术一个实施例的多线程管理方法的流程图;图3示出了根据本专利技术一个实施例的多线程应用程序中的线程模型的示意图;以及图4示出了根据本专利技术一个实施例的多线程管理装置的结构框图。【具体实施方式】下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。如图1所示,为现有技术中多线程应用程序中的线程模型,该多线程应用程序包括一个主线程和三个工作线程(例如工作线程1、工作线程2和工作线程3),程序里有一个文件描述符fd (file descriptor),主线程可以用该文件描述符fd把处理任务分配给工作线程,所有的工作线程(工作线程1、工作线程2和工作线程3)都可以监听文件描述符fd上的读事件。主线程在启动后就可以监听客户端的连接,当有客户端发起连接后,主线程接受该连接,该主线程可以将客户端的相关信息封装成一个格式为CON包(Concurrent包)格式的处理任务,把CON包放入一个全局任务队列(即所有的工作线程共用一个任务队列)里。然后主线程向文件描述符fd发送消息,该消息会使得监听文件描述符fd的本文档来自技高网...
一种多线程管理方法及装置

【技术保护点】
一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,所述方法包括:在所述主线程接受客户端的连接请求之后,将所述客户端的相关信息封装成处理任务;所述主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程;所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中;所述主线程激活所述所选择的工作线程,由所述所选择的工作线程从其任务队列中取出所述处理任务,并由所述所选择的工作线程根据所述处理任务进行相应的处理。

【技术特征摘要】
1.一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中多个线程包括:主线程和多个工作线程,所述方法包括: 在所述主线程接受客户端的连接请求之后,将所述客户端的相关信息封装成处理任务; 所述主线程根据预先设定的工作线程选择策略,从多个工作线程中选择一个工作线程; 所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中; 所述主线程激活所述所选择的工作线程,由所述所选择的工作线程从其任务队列中取出所述处理任务,并由所述所选择的工作线程根据所述处理任务进行相应的处理。2.根据权利要求1所述的方法,在所述主线程接受客户端的连接请求之前,所述方法还包括: 在所述主线程启动之后,生成与每个工作线程对应的文件描述符和任务队列; 每个工作线程监听与其对应的文件描述符上的读事件,所述主线程监听客户端的连接请求。3.根据权利要求1 或2所述的方法,其中,所述预先设定的工作线程选择策略包括:根据每个工作线程所对应的任务队列的长度,从多个工作线程中选出当前任务队列最短的工作线程;或,根据每个工作线程的负载的大小,从多个工作线程中选出负载最轻的工作线程。4.根据权利要求1~3任一项所述的方法,其中,所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列中的步骤为: 所述主线程将封装得到的处理任务写入到所选择的工作线程的任务队列的队尾。5.根据权利要求1~4任一项所述的方法,其中,所述主线程激活所选择的工作线程,由所选择的工作线程从其任务队列中取出处理任务,并由所选择的工作线程根据处理任务进行相应的处理的步骤包括: 所述主线程向所述所选择的工作线程对应的文件描述符发送消息,以激活所述所选择的工作线程; 在所述所选择的工作线程在收到对应的文件描述符上的读事件后,从其任务队列中取出处理任务,并由所选择的工作...

【专利技术属性】
技术研发人员:朱超陈飞王超
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1