CN103677750A - 线程的处理方法和装置 - Google Patents
线程的处理方法和装置 Download PDFInfo
- Publication number
- CN103677750A CN103677750A CN201310662534.6A CN201310662534A CN103677750A CN 103677750 A CN103677750 A CN 103677750A CN 201310662534 A CN201310662534 A CN 201310662534A CN 103677750 A CN103677750 A CN 103677750A
- Authority
- CN
- China
- Prior art keywords
- register
- control structure
- thread
- address
- current thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种线程的处理方法和装置,该方法包括:访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;根据所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。通过该线程的处理方法和装置,可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种线程的处理方法和装置。
背景技术
计算机***是通过运行各个线程,以完成各种功能。常见的,在以Java(由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称)虚拟机为例,每个Java线程都拥有一块独立的控制结构。该控制结构为位于Java虚拟机内存中的存储空间,保存了Java线程在运行过程中的一些全局信息,例如当前线程状态、异常信息、虚拟机运行结果、栈状态等。同一个线程内部的多个函数是可以共享该线程的控制结构,而线程中的各个函数是根据控制结构的首地址,使用该控制结构。
在现有技术中,获取Java线程控制结构首地址是通过调用线程标准库Pthreads中的函数pthread_getspecific实现的。具体实现方式为:在线程被创建时,选取计算机***的内存的部分存储空间,作为该线程的控制结构分配至该线程,同时调用pthread_key_create函数向当前创建的线程分配键值,该键值作为该线程针对控制结构的线程索引,且调用pthread_setspecific函数将该线程索引与该线程的控制结构首地址进行绑定;当在线程运行的过程中需要使用控制结构时,可以通过上述线程索引调用pthread_getspecific函数获取该线程的控制结构的首地址。
在使用现有技术获取线程的控制结构首地址时发现,在上述方案中,每次获取线程的控制结构首地址都需要通过函数的调用和返回,导致获取速度较慢,影响线程的处理效率。
发明内容
本发明提供一种线程的处理方法和装置,用于优化获取线程的控制结构的首地址的方法。
第一方面,本发明提供一种线程的处理方法,包括:
访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;
根据所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。
结合第一方面,在第一实施方式中,在访问第一寄存器之前,将所述当前线程对应的控制结构的首地址缓存至所述第一寄存器。
结合第一方面的第一实施方式,在第二实施方式中,所述根据所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构,包括:
将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器,所述第二寄存器为所述当前线程中当前执行的函数所对应的寄存器;
控制所述当前执行的函数按照所述第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息。
结合第一方面的第二实施方式,在第三实施方式中,所述将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器之前,所述处理方法还包括:
在至少一个可用寄存器中,向所述当前执行的函数分配第二寄存器;所述至少一个可用寄存器中不包括所述第一寄存器。
结合第一方面至第一方面第三实施方式中的任一种实施方式,在第四实施方式中,所述第一寄存器为存储寄存器。
第二方面,本发明提供一种线程的处理装置,包括:
获取模块,与所述获取模块连接,用于访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;
控制模块,用于根据所述获取模块获得的所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。
结合第二方面,在第一实施方式中,所述处理装置还包括存储模块,与所述获取模块连接,用于在所述获取模块访问第一寄存器之前,将所述当前线程对应的控制结构的首地址缓存至所述第一寄存器。
结合第二方面第一实施方式,在第二实施方式中,所述控制模块具体用于将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器,所述第二寄存器为所述当前线程中当前执行的函数所对应的寄存器;
所述控制模块具体用于控制所述当前执行的函数按照所述第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息。
结合第二方面第二实施方式,在第三实施方式中,所述处理装置还包括分配模块,与所述控制模块连接,用于在至少一个可用寄存器中,向所述当前执行的函数分配第二寄存器;所述至少一个可用寄存器中不包括所述第一寄存器。
结合第二方面至第二方面第三实施方式,在第四实施方式中,所述第一寄存器为存储寄存器。
通过本发明提供的线程的处理方法和装置,线程的控制结构的首地址被缓存至第一寄存器中,则线程的处理装置可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率。
附图说明
图1为本发明线程的处理方法实施例一的流程图;
图2为本发明线程的处理方法实施例二的流程图;
图3为本发明线程的处理装置实施例一的结构图;
图4为本发明线程的处理装置实施例二的结构图。
具体实施方式
图1为本发明线程的处理方法实施例一的流程图。如图1所示,实现本实施例的执行主体为线程的处理装置,该处理装置可以采用软件和/或硬件的方式实现,优选的,该处理装置可以集成于计算机设备中的处理器,具体的,该处理方法包括:
S101、访问第一寄存器,获得第一寄存器中所缓存的当前线程对应的控制结构的首地址。
在计算机***中,存在多个寄存器,例如在采取精简指令集的处理器架构(Microprocessor without interlocked piped stages architecture,简称MIPS架构)中,含有多种寄存器,例如特殊寄存器(R0,SP,FP等)、临时寄存器(T0-T9)、以及存储寄存器(S0-S7)等。
本实施例中的第一寄存器可以根据需要选择上述任意一种寄存器,但优选的,本实施例的第一寄存器为存储寄存器,其原因在于,在一些特殊场景下,特殊寄存器具有特殊的用途,临时寄存器中的赋值会被编译器修改,而存储寄存器中的赋值不会被任意修改,因此为了保证控制结构首地址的安全性,本实施例中优选存储寄存器作为上述第一寄存器,缓存当前线程对应的控制结构首地址。
当计算机***中的线程的处理装置运行当前线程时,该当前线程需要使用对应的控制结构时,线程的处理装置访问该第一寄存器,获取当前线程所对应的控制结构的首地址。
S102、根据当前线程对应的控制结构的首地址,控制当前线程使用该当前线程对应的控制结构。
线程的处理装置获取了控制结构的首地址,便可将当前线程运行过程中各个函数所确定的全局信息存储至该控制结构,与线程内其他函数共享;或者,线程中的函数需要调用某个全局信息时,便可根据当前线程对应的控制结构的首地址,在该控制结构中获取所需要的全局信息。
本实施例中,线程的控制结构的首地址被缓存至第一寄存器中,则线程的处理装置可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率。
图2为本发明线程的处理方法实施例二的流程图。如图2所示,本实施例是在图1所示的实施例的基础上,进一步描述线程的处理方法,该处理方法包括:
S201、将当前线程对应的控制结构的首地址缓存至第一寄存器。
在计算机***中,一个线程在被创建时,则在计算机***的内存中针对该线程分配一段存储空间,作为该线程的控制结构;但该线程被创建后,作为当前线程被运行时,并不立即使用控制结构,但会在该当前线程的运行过程中,例如需要存储作为全局信息的数据时才使用该控制结构,因此为了便于当前线程在运行过程中使用该控制结构,则将当前线程对应的控制结构的首地址缓存至第一寄存器。
S202、访问第一寄存器,获得第一寄存器中所缓存的当前线程对应的控制结构的首地址。
可以理解的,当前线程中包含多条指令,则线程的处理装置依次执行各个指令,以完成该当前线程的运行,因此当执行到当前线程中的某一条指令时,且该指令为需要使用控制结构的函数,则线程的处理装置访问第一寄存器,获得第一寄存器中所缓存的当前线程对应的控制结构的首地址。
S203、向当前执行的函数分配第二寄存器。
在MIPS架构下,当前线程中当前执行的函数在寻址访问存储空间时,是需要在对应的寄存器中获取所需要的地址,因此线程的处理装置在处理线程时,会采用分配算法实时的向当前线程中的当前执行的函数分配寄存器,例如通过线性扫描算法、整数线性规划算法等分配算法实时地向当前线程中的当前执行的函数分配寄存器,即上述第二寄存器为线程的处理装置通过分配算法分配于当前线程中当前执行的函数的寄存器。
需要补充说明的是,线程的处理装置在采用分配算法分配第二寄存器时,是在扫描到的至少一个可用寄存器中确定第二寄存器,而上述第一寄存器也为可用寄存器,为了防止第一寄存器被分配出去,造成第一寄存器中的存储的信息被修改,因此,线程的处理装置在实施本实施例时,即在可用寄存器中确定了第一寄存器后,便将该第一寄存器从计算机***中的可用寄存器中去除,使得所述至少一个可用寄存器中不包括上述第一寄存器。具体可以通过更改寄存器的标识等方法,以使第一寄存器不再作为可用寄存器。
另外,线程的处理装置可以同时执行上述S202和S203,或先执行S203再执行S202。
S204、将第一寄存器中的当前线程对应的控制结构的首地址缓存至第二寄存器。
由于线程中的函数须在第二寄存器中获取所需要的地址,则线程的处理装置将在第一寄存器中获取的控制结构的首地址缓存至第二寄存器。
S205、控制当前执行的函数按照所述第二寄存器中的控制结构的首地址,使用该控制结构。
具体的,由于当前执行的函数在第二寄存器中获取了当前线程所对应的的控制结构的首地址,控制当前执行的函数按照第二寄存器中的控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取控制结构内已存储的全局信息。
补充说明的是,本实施例应用在实际中,例如本实施例可以应用在JAVA虚拟机中,上述线程即为JAVA线程。
本实施例中,线程的控制结构的首地址被缓存至第一寄存器中,则线程的处理装置可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率;另外,为了避免第一寄存器被其他指令占用,则线程的处理装置在至少一个可用寄存器中确定了第一寄存器后,便将该第一寄存器从所述至少一个可用寄存器中去除,以保证该第一寄存器中的信息的安全性。
图3为本发明线程的处理装置实施例一的结构图。如图3所示,该处理装置包括:
获取模块31,用于访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;
控制模块32,与上述获取模块31连接,用于根据所述获取模块获得的所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。
本实施例中,线程的控制结构的首地址被缓存至第一寄存器中,则线程的处理装置可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率。
图4为本发明线程的处理装置实施例二的结构图。如图4所示,本实施例是在图3所示的实施例的基础上做出进一步描述,具体的,该处理装置还包括存储模块33,与上述获取模块31连接,用于在获取模块31访问第一寄存器之前,将所述当前线程对应的控制结构的首地址缓存至所述第一寄存器。
进一步的,上述控制模块32具体用于将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器,所述第二寄存器为所述当前线程中当前执行的函数所对应的寄存器;
进一步的,上述控制模块32具体用于控制所述当前执行的函数按照所述第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息。
另外,所述处理装置还包括分配模块34,与上述控制模块32连接,用于在至少一个可用寄存器中,向所述当前执行的函数分配第二寄存器;所述至少一个可用寄存器中不包括所述第一寄存器,则上述控制模块32在控制所述当前线程使用所述当前线程对应的控制结构时,具体是将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至所述分配模块34分配的第二寄存器,并控制所述当前执行的函数按照该第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息;而且,优选的,前述第一寄存器为存储寄存器。
本实施例中,线程的控制结构的首地址被缓存至第一寄存器中,则线程的处理装置可以直接访问第一寄存器以获取控制结构的首地址,不需要通过多个函数的调用和返回,提高了线程的控制结构首地址的获取效率,从而提升了计算机***处理线程的效率;另外,为了避免第一寄存器被其他指令占用,则线程的处理装置在至少一个可用寄存器中确定了第一寄存器后,便将该第一寄存器从所述至少一个可用寄存器中去除,以保证该第一寄存器中的信息的安全性。
需要补充说明的是,上述各个装置实施例中的各个模块对应执行上述各个方法实施例中的各个步骤,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种线程的处理方法,其特征在于,包括:
访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;
根据所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。
2.根据权利要求1所述的处理方法,其特征在于,在访问第一寄存器之前,将所述当前线程对应的控制结构的首地址缓存至所述第一寄存器。
3.根据权利要求2所述的处理方法,其特征在于,所述根据所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构,包括:
将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器,所述第二寄存器为所述当前线程中当前执行的函数所对应的寄存器;
控制所述当前执行的函数按照所述第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息。
4.根据权利要求3所述的处理方法,其特征在于,所述将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器之前,所述处理方法还包括:
在至少一个可用寄存器中,向所述当前执行的函数分配第二寄存器;所述至少一个可用寄存器中不包括所述第一寄存器。
5.根据权利要求1~4任一项所述的处理方法,其特征在于,所述第一寄存器为存储寄存器。
6.一种线程的处理装置,其特征在于,包括:
获取模块,用于访问第一寄存器,获得所述第一寄存器中所缓存的当前线程对应的控制结构的首地址;
控制模块,与所述获取模块连接,用于根据所述获取模块获得的所述当前线程对应的控制结构的首地址,控制所述当前线程使用所述当前线程对应的控制结构。
7.根据权利要求6所述的处理装置,其特征在于,所述处理装置还包括存储模块,与所述获取模块连接,用于在所述获取模块访问第一寄存器之前,将所述当前线程对应的控制结构的首地址缓存至所述第一寄存器。
8.根据权利要求7所述的处理装置,其特征在于,所述控制模块具体用于将所述第一寄存器中的所述当前线程对应的控制结构的首地址缓存至第二寄存器,所述第二寄存器为所述当前线程中当前执行的函数所对应的寄存器;
所述控制模块具体用于控制所述当前执行的函数按照所述第二寄存器中的所述控制结构的首地址,将新增全局信息存储至所述控制结构;或者,获取所述控制结构内已存储的全局信息。
9.根据权利要求8所述的处理装置,其特征在于,所述处理装置还包括分配模块,与所述控制模块连接,用于在至少一个可用寄存器中,向所述当前执行的函数分配第二寄存器;所述至少一个可用寄存器中不包括所述第一寄存器。
10.根据权利要求6~9任一项所述的处理装置,其特征在于,所述第一寄存器为存储寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310662534.6A CN103677750B (zh) | 2013-12-09 | 2013-12-09 | 线程的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310662534.6A CN103677750B (zh) | 2013-12-09 | 2013-12-09 | 线程的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677750A true CN103677750A (zh) | 2014-03-26 |
CN103677750B CN103677750B (zh) | 2017-03-29 |
Family
ID=50315431
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310662534.6A Active CN103677750B (zh) | 2013-12-09 | 2013-12-09 | 线程的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677750B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030191922A1 (en) * | 2002-04-09 | 2003-10-09 | Jon Skull | Method and system for local memory addressing in single instruction, multiple data computer system |
CN1614555A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 用于自主硬件辅助的线程栈跟踪的装置与方法 |
CN1801101A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作***中线程的实现和线程状态切换的方法 |
CN101882091A (zh) * | 2010-06-22 | 2010-11-10 | 北京北大众志微***科技有限责任公司 | 线程局部存储实现方法和装置 |
CN102769575A (zh) * | 2012-08-08 | 2012-11-07 | 南京中兴特种软件有限责任公司 | 一种用于智能网卡的流量负载均衡方法 |
-
2013
- 2013-12-09 CN CN201310662534.6A patent/CN103677750B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030191922A1 (en) * | 2002-04-09 | 2003-10-09 | Jon Skull | Method and system for local memory addressing in single instruction, multiple data computer system |
CN1614555A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 用于自主硬件辅助的线程栈跟踪的装置与方法 |
CN1801101A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作***中线程的实现和线程状态切换的方法 |
CN101882091A (zh) * | 2010-06-22 | 2010-11-10 | 北京北大众志微***科技有限责任公司 | 线程局部存储实现方法和装置 |
CN102769575A (zh) * | 2012-08-08 | 2012-11-07 | 南京中兴特种软件有限责任公司 | 一种用于智能网卡的流量负载均衡方法 |
Non-Patent Citations (1)
Title |
---|
张铎 等: "基于事务存储的事务级线程切换", 《计算机工程》 * |
Also Published As
Publication number | Publication date |
---|---|
CN103677750B (zh) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9870317B2 (en) | Incremental class unloading in a region-based garbage collector | |
CN103605568B (zh) | 一种多线程管理方法及装置 | |
CN101859279B (zh) | 一种内存分配、释放方法及装置 | |
JPH04268927A (ja) | メモリ管理方法 | |
CN103049328B (zh) | 计算机***中内存资源分配方法 | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
CN106528065B (zh) | 一种线程获取方法及设备 | |
KR101458028B1 (ko) | 병렬 처리 장치 및 방법 | |
CN110781016B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN109739784A (zh) | 一种数据处理方法、装置、***及fpga加速卡 | |
CN105787392B (zh) | 一种数据读写控制方法及控制装置 | |
CN105677481A (zh) | 一种数据处理方法、***及电子设备 | |
CN109643239B (zh) | Java卡应用存储器占用空间优化 | |
CN109408226A (zh) | 数据处理方法、装置及终端设备 | |
CN102542525B (zh) | 一种信息处理设备以及信息处理方法 | |
CN105468304B (zh) | 一种Native存储卡及其管理方法 | |
CN104281587A (zh) | 一种建立连接的方法及装置 | |
CN103677750A (zh) | 线程的处理方法和装置 | |
CN110162483A (zh) | 静态内存碎片整理方法、装置、计算机设备及存储介质 | |
CN108563507A (zh) | 一种内存管理方法、装置、设备及可读存储介质 | |
CN107817972A (zh) | 缓存代码处理方法、装置、存储介质及电子设备 | |
CN116483550A (zh) | 张量计算图的计算资源分配方法、装置和可读存储介质 | |
CN107368371B (zh) | 嵌入式plc的编程资源分配方法 | |
KR100912114B1 (ko) | 디지털 신호처리 프로세서에서 효과적인 데이터 전송을위한 메모리 운용 방법 | |
CN118394493A (zh) | 基于巨型内存页的边缘深度学习模型推理加速方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100190 No. 10 South Road, Zhongguancun Academy of Sciences, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |