CN108345452A - 一种线程管理方法及装置 - Google Patents
一种线程管理方法及装置 Download PDFInfo
- Publication number
- CN108345452A CN108345452A CN201710062788.2A CN201710062788A CN108345452A CN 108345452 A CN108345452 A CN 108345452A CN 201710062788 A CN201710062788 A CN 201710062788A CN 108345452 A CN108345452 A CN 108345452A
- Authority
- CN
- China
- Prior art keywords
- thread
- instruction
- synchrolock
- read
- target object
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种线程管理方法及装置。本申请中,接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象属于指定的应用程序;根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;启动所述线程对象,得到对应的线程。本申请基于多层架构提供了通用的线程创建过程,为多线程的创建与管理提供了可能性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种线程管理方法及装置。
背景技术
JavaScript是一种动态类型、面向对象的高级编程语言,由欧洲电脑制造商协会(ECMA)制定的标准,被大多数网站所使用,也被目前的主流浏览器支持。JavaScript语言程序的执行依赖于JavaScript虚拟机,也就是说,JavaScript语言程序的执行并不是直接在操作系统上运行,而是需要通过JavaScript虚拟机来执行。
JavaScript虚拟机负责执行JavaScript程序以及为JavaScript程序调度资源。
发明内容
本申请实施例公开了一种线程管理方法及装置。
第一方面,本申请实施例提供了一种线程管理方法,包括:
接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象对应指定的应用程序;
根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;
启动所述线程对象,得到对应的线程。
第二方面,本申请实施例提供了一种线程管理装置,包括:
接收模块,用于接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象属于指定的应用程序;
管理模块,用于根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;并启动所述线程对象,得到对应的线程。
第三方面,本申请实施例提供了一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被一个或多个处理器执行时,使得通信设备执行本申请实施例提供的方法。
第四方面,本申请实施例提供的一种装置,包括:一个或多个处理器;以及,一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被所述一个或多个处理器执行时,使得所述装置执行本申请实施例提供的方法。
本申请的上述实施例中,在接收到动态语言层发送的创建线程对象指令后,由于所述创建线程对象指令中包括用于创建线程对象的接口,因此可以根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的创建线程对象的方法,创建得到对应的线程对象,并进而启动所述线程对象,得到对应的线程。从而基于多层架构提供了通用的线程创建过程,为多线程的创建与管理提供了可能性。
附图说明
图1为本申请实施例中动态语言系统架构示意图;
图2为本申请实施例中多线程架构的示意图;
图3为本申请实施例提供的线程对象的创建流程示意图;
图4为本申请实施例中线程对象管理流程示意图;
图5为本申请实施例中采用同步锁进行线程同步互斥的流程示意图;
图6为本申请实施例中采用同步声明实现对方法进行同步互斥的流程示意图;
图7为本申请实施例中采用同步声明实现对语句进行同步互斥的流程示意图;
图8a和图8b为本申请实施例中的JavaScript对象的布局示意图;
图9为本申请实施例提供的针对对象进行同步互斥的流程示意图;
图10为本申请实施例提供的线程管理装置的结构示意图;
图11为本申请实施例提供的装置的结构示意图。
具体实施方式
虽然本申请的概念易于进行各种修改和替代形式,但是其具体实施例已经通过附图中的示例示出并且将在本文中详细描述。然而,应当理解,没有意图将本申请的概念限制为所公开的特定形式,而是相反,意图是覆盖与本申请以及所附权利要求一致的所有修改、等同物和替代物。
说明书中对“一个实施例”、“实施例”、“说明性实施例”等的引用,指示所描述的实施例可包括特定特征、结构或特性,但是每个实施例可以或可以不必包括特定特征、结构或特性。此外,这样的短语不一定指的是相同的实施例。进一步地,认为在本领域技术人员的知识范围内,当结合实施例描述特定特征、结构或特性时,结合无论是否明确描述的其它实施例影响这样的特征,结构或特性。另外,应当理解,以“A,B和C中的至少一个”的形式包括在列表中的项目可以表示(A);(B);(C);(A和B);(A和C);(B和C);或(A,B和C)。类似地,以“A,B或C中的至少一个”的形式列出的项目可以表示(A);(B);(C);(A和B);(A和C);(B和C)或(A,B和C)。
在一些情况下,所公开的实施例可以在硬件、固件、软件或其任何组合中实现。所公开的实施例还可以被实现为由一个或多个暂时性或非暂时性机器可读(例如,计算机可读)存储介质携带或存储的指令,其可以由一个或多个处理器读取和执行。机器可读存储介质可以体现为用于以机器可读形式(例如,易失性或非易失性存储器、介质盘或其他介质)存储或传输信息的任何存储设备,机制或其他物理结构的设备)。
在附图中,一些结构或方法特征可以以特定布置和/或顺序示出。然而,应当理解,可能不需要这样的具体布置和/或排序。相反,在一些实施例中,这些特征可以以与说明性附图中所示不同的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示这种特征在所有实施例中都是需要的,并且在一些实施例中可以不包括或可以与其他特征组合。
本申请实施例提供了语言层面的动态语言多线程编程能力,使开发者能够使用多线程编程的能力,增加程序的性能以及应用范围。
动态语言是计算机编程语言中的一个语言类别,是一类在运行时可以动态地改变类型、结构的语言,在运行时函数和属性可以被增加、修改和删除。例如JavaScript、Python、Ruby等都属于动态语言。动态语言不需要编译即可运行,在运行时需要运行环境的支撑,这个环境叫做运行时环境,它包含动态语言运行所需要的所有要素,例如Java虚拟机、JavaScript虚拟机等。
其中,JavaScrip虚拟机也可称为JavaScript引擎,可以被解释为JavaScript托管运行时环境(managed runtime environment for JavaScript),简称为运行时环境,或者虚拟可执行环境(Virtual Execution Environment)。它可以通过强制的自动内存管理,配合强制的类型系统安全性保证,以及数组越界检测等功能,保证JavaScript程序在内存分配、访问、释放上的安全性;还可以对代码执行进行权限管理、可见性限制等,保证代码只在其应用的权限内执行。
为了更清楚地理解本申请实施例,首先对与本申请实施例相关的面向对象编程技术所涉及的一些技术术语进行简要说明。
-对象:对象中可定义有属性(property)和方法(method),可以将属性和方法(函数)封装在对象中。在内存中,这些对象其实是一些内存块,里面保存了数据和可运行的方法(函数)。
-线程对象:是线程类的实例对象。线程对象封装了线程的一些信息(比如包括线程执行的方法(函数)),一个线程对象中的方法(函数)可以被其他线程运行。以JavaScript为例,线程对象可通过继承thread类或者通过实现runnable接口得到,比如从thread派生出一个新类,在其中加入属性和方法(函数),并可覆盖run()方法,即可创建完成一个派生类的新线程对象。其中,run()方法中包含了线程所要执行的代码。
-线程:线程是对象中定义的方法的执行路径,也就是说,线程是代码的一次执行过程,在这个执行过程中,线程可以执行代表它的线程对象所定义的方法(函数),也可以执行其它的对象中的方法(函数)。以JavaScript为例,当通过继承thread类创建一个线程对象后执行start()方法(函数),从而启动该线程对象对应的线程。
本申请实施例能够使动态语言虚拟机支持多线程,并在动态语言层提供相应配套的多线程开发语言接口。基于本申请实施例提供给开发者语言级别的多线程开发能力,开发者可以使用本申请实施例提供的接口进行多线程程序的开发,如进行线程创建、运行以及通信。本申请实施例通过提供多线程的能力,拓宽了动态语言的应用范围,比如后台事件处理和前台页面渲染分线程处理可以更高效地开发交互式程序;同时由于多线程能更好地利用多核处理器的计算资源,在并发数据处理等大量计算的应用场景,本申请实施例可提高程序的运行性能。
本申请实施例提供了多线程管理方案以实现多线程开发能力,多线程管理具体可包括:线程的创建、线程的同步、线程的销毁等。
本申请实施例可适用于基于单线程机制的动态语言,使基于单线程机制的动态语言实现多线程能力。其中,用于实现线程管理方法的装置可称为线程管理装置。以动态语言为JavaScript语言为例,该装置可以是为JavaScript虚拟机。
为方便理解,下面首先对本申请实施例的整体框架进行描述。如图1所示,线程管理装置(比如JavaScript虚拟机)位于动态语言层(比如JavaScript语言层)和操作系统之间。动态语言程序由动态语言代码实现,对应于动态语言层,动态语言程序的多线程操作运行于线程管理装置之上,通过线程管理装置调用操作系统中的底层多线程库进行相应的多线程操作。需要指出的是,线程管理装置运行的操作系统拥有一套底层的线程库。
线程管理装置可对动态语言线程进行管理,图2示出了本申请实施例提供的由线程管理装置管理的多线程架构。如图2所示,每个线程各自拥有不同的栈(Stack),多个线程可共享一个堆(Heap)。
栈是为执行线程留出的内存空间,每个线程有自己独立的栈和私有数据区,与其他线程隔离。当函数被调用的时候,栈顶为局部变量等数据预留块,当函数执行完毕,该块被释放,在下次的函数调用时再被使用。堆是为动态分配预留的内存空间,所存放的变量可以是对象,该变量为引用类型,即,该变量中实际保存的是一个指针,这个指针指向另一个位置。每个线程都有一个栈,但是每一个应用程序通常只有一个堆(尽管为不同类型分配内存使用多个堆的情况也是有的)。
本申请实施例基于上述架构,提供了多线程管理方案,其中可包括:线程对象的创建、线程对象的释放、线程对象的同步以及除线程对象之外的其它对象的同步等。下面分别对这些过程进行详细描述。
(一)线程的创建
本申请实施例中,在操作系统层中定义有用于创建线程对象的方法(函数),线程管理装置将该方法的调用接口提供给动态语言层,以便开发者调用该接口来创建线程对象。线程管理装置提供给动态语言层的接口具体可以是应用程序编程接口(ApplicationProgramming Interface,简称API),更具体地,该API可以包括函数名和参数等信息。线程管理装置可向动态语言层提供多个API,每个API对应相应的方法(函数)。
图3示出了本申请实施例中的线程对象的创建过程,如图所示,该流程可包括:
在图3的S301中:线程管理装置接收动态语言层发送的创建线程对象指令,该创建线程对象指令中包括用于创建线程对象的接口,该线程对象属于指定的应用程序。在一个实施例中,开发者可根据提供给动态语言层的线程对象创建接口编写动态语言应用程序代码,当该应用程序代码被执行时,线程管理装置解析该应用程序代码,得到其中用于创建线程对象的接口,从而通过后续步骤执行线程对象创建方法(函数),创建得到线程对象。
在图3的S302中:线程管理装置根据该创建线程对象的接口,调用操作系统中该接口对应的对象所提供的用于创建线程对象方法(函数),创建得到对应的线程对象。在一个实施例中,以线程管理装置为JavaScript虚拟机为例,JavaScript虚拟机可根据操作系统提供的用于创建线程对象的对象(以下为描述方便将该对象称为obj对象),通过创建该对象的一个实例,创建得到线程对象。该obj对象是操作系统提供的对象,该obj对象中封装有属性和方法,比如其中可包含new方法。通过针对该obj对象执行new方法可创建得到新的线程对象,obj对象中的属性和方法可被新的线程对象所继承,还可向新的线程对象中添加属性和方法。创建得到的线程对象中包括run方法(函数),该方法(函数)为线程启动时所要执行的方法(函数),该run方法(函数)可由开发者根据所要实现的功能或所要执行的操作进行自定义。
在创建线程对象过程中,线程管理装置创建并注册一个内部的线程对象管理结构来管理对应线程所拥有的资源。该线程对象管理结构可如图2所示。其中,新创建得到的线程对象的指针可存储在堆(Heap)中,该线程的变量等数据可存储于该线程的栈(Stack)中。
在图3的S303中:线程管理装置启动所创建的线程对象,得到对应的线程。
进一步地,线程管理装置在创建线程对象后,可将该线程对象所对应的线程句柄提供给应用程序,供应用程序根据该调用操作对应的线程。在一个实施例中,以线程管理装置为JavaScript虚拟机为例,JavaScript虚拟机可将线程句柄提供给JavaScript语言层,以便开发者通过该线程句柄操作对应的线程。线程是在线程对象启动后创建的,一个线程可以有一个或多个句柄,不同的句柄可以具有不同的操作权限。当然,JavaScript虚拟机也可以将其他能够指示线程的信息提供给JavaScript语言层,用于在开发者操作线程时使用。
创建线程对象后,可以通过线程句柄操作对应的线程,如执行线程、等待线程结束、回收线程等。
比如,启动线程的过程可包括:线程管理装置解析动态语言应用程序代码,得到基于线程句柄的启动线程对象的指令,线程管理装置根据该指令,通过调用相应线程对象提供的启动方法(如start方法)来启动该线程对象。当调用线程对象的start方法时,线程管理装置通过操作系统启动该线程。线程管理装置根据该线程对象提供的运行属性(如run属性)的属性值,调用该属性值所指示的方法(该属性的属性值为该方法的名称)。
其中,当线程管理装置根据run属性的属性值得到基于动态语言程序代码封装的方法(函数)后,由于操作系统并不直接对接动态语言层,无法解析该方法,因此线程管理装置负责解释该方法,得到操作系统层提供的接口,并调用该接口以执行操作系统提供的相应方法。
再比如,等待线程结束的过程可包括:线程管理装置解析动态语言应用程序代码,得到基于线程句柄的等待线程结束的指令,线程管理装置根据该指令,通过执行线程对象提供的用于等待线程结束的方法(如join方法)来等待线程结束。其中,由于操作系统并不直接对接动态语言层,无法解析该join方法,因此线程管理装置解释该方法,得到操作系统层提供的接口,并通过调用该接口以执行相应的join方法。
再比如,停止线程的过程可包括:线程管理装置解析动态语言应用程序代码,得到基于线程句柄的停止线程的指令,线程管理装置根据该指令,通过执行线程对象中的用于停止线程的方法(如sleep方法)来等停止线程。其中,由于操作系统并不直接对接动态语言层,无法解析该sleep方法,因此线程管理装置解释并执行该方法。
为了更清楚地说明线程对象的管理过程,下面以JavaScript虚拟机为例,结合图4进行举例说明。
参见图4,在S401至S402中,JavaScript虚拟机对基于JavaScript语言层的JavaScript应用程序代码进行解析,得到用于表示调用obj对象中的新建实例方法(new方法)的程序语句,JavaScript虚拟机根据该程序语句中的API(如new方法的函数名)调用操作系统提供的线程库接口,基于操作系统提供的obj对象创建该对象的实例。此过程中,JavaScript虚拟机将该obj对象的属性、方法进行封装,创建得到线程对象,并将线程句柄返回给JavaScript语言层。
在S403中,JavaScript虚拟机对基于JavaScript语言层的JavaScript应用程序代码进行解析,得到用于表示调用对应的线程对象(通过线程句柄来标识对应的线程对象)的启动方法(start方法)的程序语句时,JavaScript虚拟机根据该程序语句中的API(如start方法的函数名)调用操作系统提供的线程库接口,通过操作系统创建对应的线程,然后启动该线程。该过程中,JavaScript虚拟机根据该线程对象从obj对象继承的run属性的属性值,执行该属性值所指示的方法(该属性的属性值为该方法的名称)。
在S404中,JavaScript虚拟机对基于JavaScript语言层的JavaScript应用程序代码进行解析,得到用于表示调用对应的线程对象(通过线程句柄来标识对应的线程对象)的等待线程结束方法(join方法)时,JavaScript虚拟机根据该程序语句中的API(如join方法的函数名)调用操作系统提供的线程库接口,通过操作系统针对线程句柄所对应的线程执行相应的方法。
在S405中,JavaScript虚拟机对基于JavaScript语言层的JavaScript应用程序代码进行解析,得到用于表示调用对应的线程对象(通过线程句柄来标识对应的线程对象)的线程结束方法(sleep方法)时,JavaScript虚拟机根据该程序语句中的API(如sleep方法的函数名)调用操作系统提供的线程库接口,通过操作系统针对该线程句柄所对应的线程执行相应的方法。
采用上述实施例提供的方法,可创建多个线程,并可对每个线程进行管理,从而实现多线程管理。
通过以上流程可以看出,线程管理装置从操作系统中封装好线程的能力(包括属性和方法),并将这些能力封装到线程对象中,并将该线程对象的句柄提供给动态语言层。当创建线程时,线程管理装置会通过操作系统创建一个线程对象,然后启动该线程对象得到相应的线程。线程管理装置通过封装线程对象并暴露到动态语言层,从而为开发者提供操作线程的能力。
(二)线程同步
(1)使用同步锁实现线程同步
在多线程系统中,多个线程同时运行时可能调用函数或访问相同的数据,在多个线程同时对同一个内存地址进行写入的情况下,由于CPU时间调度上的问题,写入数据会被多次的覆盖。对于一些敏感数据不允许被多个线程同时读写,此时需要使用同步互斥技术,保证数据在任何时刻,最多有一个线程读写,以保证数据的完整性。
线程同步,是指当有一个线程在对内存进行读写操作时,其他线程都不可以对这个内存地址进行读写操作,直到该线程完成读写操作,其他线程才能对该内存地址进行读写操作,而其他线程又处于等待状态。
在本申请的一些实施例中,采用互斥对象机制实现线程同步,只有获得同步锁的线程才有访问公共资源的权限。因为同步锁只有一个,所以能保证公共资源不会同时被多个线程访问。同步锁不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享。
上述同步锁是由线程管理装置对动态语言层提供的全局对象,用来进行某一段代码的线程同步。开发者通过构建同步锁,能够实现线程之间执行互斥操作。同步锁的创建过程与线程对象的创建过程类似,可通过调用动态语言层提供的用于创建同步锁的接口,使线程管理装置通过操作系统提供的接口,执行操作系统中的创建同步锁的方法,创建得到同步锁。所创建得到的同步锁为全局对象。线程可以使用此同步锁进行同步,比如线程1在对一组全局数据进行读写操作时,若不希望其他线程进行读写,则可以使用此同步锁。
同步锁中可包括如下属性和方法:
锁标识属性:该属性值用于唯一标识同步锁,一个同步锁与一个内存区域对应,不同的内存区域对应不同的同步锁;
加锁方法:获得该线程对象的线程可执行该方法,执行该方法可对锁标识属性的属性值所指示的内存区域进行加锁,被加锁的内存区域只能被获得该线程对象的线程进行读写操作,其他线程不允许对该内存区域进行读写操作;
解锁方法:获得该线程对象的线程可执行该方法,执行该方法可对锁标识属性的属性值所指示的内存区域进行解锁。
图5示出了线程1和线程2使用同步锁实现互斥操作的示意图,如图所示,线程1和线程2同时需要计算全局数据,开发者希望两个线程不要同时修改该全局数据。开发者就可以使用同步锁进行线程同步。首先,针对请求读写的全局数据所在的内存区域新建一个全局的同步锁。当线程1用该同步锁对需要保护的内存区域进行保护,对该内存区域进行读写前先对该内存区域加锁,对该内存区域读写完成后,对该内存区域进行解锁。同理,当线程2用该同步锁对需要保护的内存区域进行保护,对该内存区域进行读写前先对该内存区域加锁,对该内存区域读写完成后,对该内存区域进行解锁。
如图5所示,在线程1需要对该全局数据进行读写时,线程1向线程管理装置(如JavaScript虚拟机)请求获取该全局数据所在的内存区域的锁对象,线程管理装置判断该内存区域的锁状态,若为未被加锁状态,则线程管理装置将该同步锁给线程1,线程1获得该同步锁后,对该同步锁所对应的内存区域执行加锁方法(lock方法),该内存区域的状态变为加锁状态,线程1对被该线程加锁的该内存区域进行读写操作,读写操作完成后,对该内存区域执行解锁(unlock)方法,该内存区域的状态变为未加锁状态。若线程1向线程管理装置请求获取同步锁后,线程管理装置判断该同步锁对应的内存区域当前为加锁状态,说明该内存区域当前正在被其他线程读写,因此不糊将该内存区域对应的同步锁给线程1,线程1处于等待状态。当该内存区域的状态变为未被加锁状态时,线程管理装置将该内存区域对应的同步锁给线程1。同理,线程2基于该同步锁进行数据读写的过程与此类似。
需要说明的是,线程对内存区域进行加锁或解锁的过程中,由于操作系统并不直接对接动态语言层,无法解析加锁方法或解锁方法,因此线程管理装置负责在操作系统创建的线程内解释并执行该方法。另外,线程对内存区域进行读写的过程中,由于操作系统并不直接对接动态语言层,无法解析内存区域读写方法,因此线程管理装置负责在操作系统创建的线程内解释并执行该方法。
(2)采用同步声明实现线程同步
在本申请的另外一些实施例中,可对方法或动态语言程序语句进行声明,以表明被声明的方法或动态语言程序语句需要同步互斥执行,即,一个线程执行该方法或动态语言程序语句时,其他线程不能执行相同的方法或动态语言程序语句。
以JavaScript虚拟机举例来说,如果线程1和其他线程(如线程2)均需要执行方法a,并且在线程1和线程2调用方法a的语句中,该方法a均被声明为进行同步互斥,这样,线程1和线程2不能同时执行方法a,只能在一个线程执行完成方法a后,另一个线程才能执行方法a。具体实现过程可如图6所示,可包括:
在图6的S601中:JavaScript虚拟机接收到线程1调用方法a的指令;
在图6的S602中:JavaScript虚拟机判断当前是否有其他线程正在执行该方法,若有,则转入图6中的S603,否则转入图6中的S604;
在图6的S603中:JavaScript虚拟机暂不执行线程1中的方法a,当其他线程(比如线程2)执行完成方法a后,转入图6中的S604:
在图6的S604中:JavaScript虚拟机执行线程1中的方法a。
再举例来说,如果线程1和其他线程(如线程2)均需要执行某语句(如对某全局变量进行赋值的操作),并且该语句被声明为进行同步互斥,这样,线程1和线程2不能同时执行该语句(比如不能同时对该全局变量进行赋值),只能在一个线程执行完成该语句后,另一个线程才能执行该语句。具体实现过程可如图7所示,可包括:
在图7的S701中:JavaScript虚拟机接收到线程1执行该语句的指令;
在图7的S702中:JavaScript虚拟机判断当前是否有其他线程正在执行该语句,若有,则转入图7中的703,否则转入图7的S704;
在图7的S703中:JavaScript虚拟机暂不执行线程1中的该语句,当其他线程(比如线程2)执行完成该语句后,转入图7的S704:
在图7的S704中:JavaScript虚拟机执行线程1中的该语句。
声明的方式可以是显式声明也可以是隐式声明。其中,在一些例子中,如果在调用该方法的语句之前和之后增加同步关键字进行声明,则称为显式声明,同样,如果在该动态语言程序语句之前和之后增加同步关键字进行声明,也称为显式声明。在另一些例子中,如果在定义或描述方法的程序代码中,将该方法放入同步关键字的范围之内,这种声明方式称为隐式声明,线程管理装置在通过调用操作系统提供的接口执行该方法时,操作系统可根据该方法的程序代码中的同步关键字,对该方法的执行过程采用同步互斥操作;同样,如果将该动态语言程序语句放入同步关键字的范围之内,则也称为隐式声明。
(三)对象同步
在多线程系统中,多个线程同时运行时可能需要对同一对象进行读写操作,在多个线程同时对同一个对象进行写入的情况下,由于CPU时间调度上的问题,写入数据会被多次的覆盖,导致错误发生。此时需要使用同步互斥技术,保证数据在任何时刻,最多有一个线程对特定的JavaScript对象进行读写。
本申请实施例中,线程管理装置对语言层提供了对象同步的能力。可预先指定对某个或某些对象的读写进行同步互斥。采用互斥对象机制实现对象同步,只有获得同步锁的线程才有读写指定的对象的权限。
该同步锁的创建过程与前述实施例类似,可通过调用动态语言层提供的用于创建同步锁的接口,使线程管理装置通过操作系统提供的接口,执行操作系统中的创建同步锁的方法,创建得到同步锁。
同步锁中可包括如下属性和方法:
锁标识属性:该属性值用于唯一标识同步锁,一个同步锁与一个内存区域(这里是一个对象对应的内存区域)对应,不同的对象对应不同的同步锁;
加锁方法:获得该线程对象的线程可执行该方法,执行该方法可对锁标识属性的属性值所指示的对象(或该对象所在的内存区域)进行加锁,被加锁的对象只能被获得该线程对象的线程进行读写操作,其他线程不允许对该对象进行读写操作;
解锁方法:获得该线程对象的线程可执行该方法,执行该方法可对锁标识属性的属性值所指示的对象进行解锁。
本申请实施例中,可以采用以下方式指定某个或某些对象采用同步互斥操作:
方法1:对象可以被划分为不同类型,本申请实施例中,提供了ConcurrentArray、ConcurrentSet和ConcurrentMap三种常用对象。该三种对象在内部虚拟机实现上已经保证线程间安全,该三种对象的操作不需要开发者在JavaScript层使用同步关键字同步;
方法2:可使用同步关键字对需要采用同步互斥操作的对象进行声明。
对象的布局由线程管理装置规定。对象的布局可以理解为对象在内存中的存储结构。比如,以对象为JavaScript对象为例,如图8a所示,JavaScript对象的布局中可包括对象头部分和对象实例部分,对象头部分中可存储有对象名称等信息,对象实例部分中可存储对象中的方法使用的变量等。
本申请实施例中,JavaScript对象的布局头中设置有用于标识同步锁状态的信息域,该信息域可以是一个或多个比特,如图8b所示。该信息域的不同取值可标识该JavaScript对象的锁状态。例如,如果该信息域的取值为0时,表示该JavaScript对象未加锁,该信息域的取值为1时,表示该JavaScript对象已经加锁。
参见图9所示,当线程管理装置在接收到线程1对某对象进行读写的指令时(图9中的S901),可判断该对象是否是被指定为进行同步互斥的对象(图9中的S902),若是,则请求获取同步锁(图9中的S903),若获取到同步锁,则将该同步锁给线程1,线程1收到同步锁后,将对该对象加锁,比如设置该对象的布局中的锁状态标志位取值为1,并对该对象进行读写操作,并在读写完成后,对该对象进行解锁,比如设置该对象的布局中的锁状态标志位取值为0(图9中的S904),若未获取到同步锁,则说明当前该对象正在被读写,此种情况下,线程管理装置等待该对象读写完成后,将同步锁给线程1,线程1获取到同步锁之后的操作同前所述(图9中的S905);若该对象未被指定为进行同步互斥,则对该对象进行读写操作(图9中的S906)。
需要说明的是,线程对对象进行加锁或解锁的过程中,由于操作系统并不直接对接动态语言层,无法解析加锁方法或解锁方法,因此线程管理装置负责在操作系统创建的线程内解释并执行该方法。另外,线程对对象进行读写的过程中,由于操作系统并不直接对接动态语言层,无法解析内存区域读写方法,因此线程管理装置负责在操作系统创建的线程内解释并执行该方法。
基于相同的技术构思,本申请实施例还提供了一种线程管理装置,该线程管理装置具体可以是前述实施例中的动态语言虚拟机,更具体地,可以是JavaScript虚拟机。
参见图10,为本申请实施例提供的线程管理装置的结构示意图,如图所示,该装置可包括:接收模块1001、管理模块1002,其中:
接收模块1001,用于接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象属于指定的应用程序;
管理模块1102,用于根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;并启动所述线程对象,得到对应的线程。
可选地,所述应用程序中对应多个线程,所述多个线程中的每个线程拥有各自独立的栈以及私有数据区,所述多个线程共享一个堆;其中,一个线程的栈是该线程所占用的内存空间,所述堆是所述应用程序的所有线程共享的内存空间。
可选地,所述接收模块还用于:接收动态语言层发送的对全局数据进行读写的指令;管理模块1002可还用于:请求获得用于对所述全局变量进行读写的第一同步锁,所述第一同步锁为全局对象;调用获得到的第一同步锁的加锁方法对所述全局变量进行加锁,对所述全局变量进行读写,并在读写完成后调用所述第一同步锁的解锁方法对所述全局变量进行解锁。
可选地,接收模块1001还用于:接收动态语言层发送的执行指定对象提供的指定方法的指令。管理模块1002还用于:确定所述指定方法是否被声明为进行同步互斥;若是,则请求获得所述指定方法对应的第二同步锁,所述第二同步锁为全局对象;调用获得到的所述第二同步锁的加锁方法对所述指定方法进行加锁,执行所述指定方法,并在执行完成后调用所述第二同步锁的解锁方法对所述指定方法进行解锁。
可选地,接收模块1001还用于:接收用于对目标对象进行读写的指令.管理模块1002还用于:若所述目标对象所属的类型为指定类型或被声明为进行同步互斥,则请求获得对所述目标对象进行读写的第三同步锁,所述第三同步锁为全局对象;调用获得到的所述第三同步锁的加锁方法对所述目标对象进行加锁,对所述目标对象进行读写,并在读写完成后调用所述第三同步锁的解锁方法对所述目标对象进行解锁。
可选地,管理模块1002具体用于:获取所述目标对象所在的内存区域中用于存储对象头信息的内存区域中的对象状态标志位,若所述对象状态标志位的取值表明所述目标对象未被加锁,则获得用于对所述目标对象进行读写的第三同步锁。可选地,管理模块1002具体用于:对所述目标对象进行加锁时,设置所述状态标志位的取值以表明所述目标对象已被加锁.。可选地,管理模块1002具体用于:对所述目标对象进行解锁时,设置所述状态标志位的取值以表明所述目标对象未被加锁。
可选地,所述管理模块还用于:将创建得到的线程对象所对应的句柄提供给所述动态语言层。
可选地,管理模块1002具体用于:接收动态语言层发送的启动所述线程对象的指令,所述启动线程对象的指令中包括所述线程对象对应的句柄;根据所述启动线程对象的指令,通过操作系统调用所述句柄对应的线程对象提供的启动方法,所述启动方法用于根据所述线程对象的运行属性的属性值,执行该属性值所指示的方法。
可选地,接收模块1001还用于:接收动态语言层发送的等待线程结束的指令,所述等待线程结束的指令中包括所述线程对象所对应的句柄。管理模块1002还用于:根据接收到的等待线程结束的指令,通过操作系统调用所述句柄对应的线程对象提供的用于等待线程结束的方法来等待线程运行结束。
可选地,接收模块1001还用于:接收动态语言层发送的停止线程的指令,所述停止线程的指令中包括所述线程对象所对应的句柄。管理模块1002还用于:根据接收到的停止线程的指令,通过操作系统调用所述句柄对应的线程对象提供的用于停止线程的方法来停止线程运行。
基于相同的技术构思,本申请实施例还提供了一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被一个或多个处理器执行时,使得通信设备执行前述实施例描述的线程管理方法。
基于相同的技术构思,本申请实施例还提供了一种装置1100,该装置1100可实现前述实施例描述的流程。
图11示例性地示出了根据各种实施例的示例装置1100,装置1100可包括一个或多个处理器1102,系统控制逻辑1101耦合于至少一个处理器1102,非易失性存储器(non-volatile memory,NMV)/存储器1104耦合于系统控制逻辑1101,网络接口1106耦合于系统控制逻辑1101。
处理器1102可包括一个或多个单核处理器或多核处理器。处理器1102可包括任何一般用途处理器或专用处理器(如图像处理器、应用处理器基带处理器等)的组合。
一个实施例中的系统控制逻辑1101,可包括任何适当的接口控制器,以提供到处理器1102中的至少一个的任何合适的接口,和/或提供到与系统控制逻辑1101通信的任何合适的设备或组件的任何合适的接口。
一个实施例中的系统控制逻辑1101,可包括一个或多个内存控制器,以提供到系统内存1103的接口。系统内存1103用来加载以及存储数据和/或指令。例如,对应装置1100,在一个实施例中,系统内存1103可包括任何合适的易失性存储器。
NVM/存储器1104可包括一个或多个有形的非暂时的计算机可读介质,用于存储数据和/或指令。例如,NVM/存储器1104可包括任何合适的非易失性存储装置,如一个或多个硬盘(hard disk device,HDD),一个或多个光盘(compact disk,CD),和/或一个或多个数字通用盘(digital versatile disk,DVD)。
NVM/存储器1104可包括存储资源,该存储资源物理上是该系统所安装的或者可以被访问的设备的一部分,但不一定是设备的一部分。例如,NVM/存储器1104可经由网络接口1106被网络访问。
系统内存1103以及NVM/存储器1104可分别包括临时的或持久的指令1110的副本。指令1110可包括当由处理器1102中的至少一个执行时导致装置1100实现图3至图7、图9描述的方法之一或组合的指令。各实施例中,指令1110或硬件、固件,和/或软件组件可另外地/可替换地被置于系统控制逻辑1101,网络接口1106和/或处理器1102。
网络接口1106可包括一个接收器来为装置1100提供无线接口来与一个或多个网络和/或任何合适的设备进行通信。网络接口1106可包括任何合适的硬件和/或固件。网络接口1106可包括多个天线来提供多输入多输出无线接口。在一个实施例中,网络接口1106可包括一个网络适配器、一个无线网络适配器、一个电话调制解调器,和/或无线调制解调器。
在一个实施例中,处理器1102中的至少一个可以与用于系统控制逻辑的一个或多个控制器的逻辑一起封装。在一个实施例中,处理器中的至少一个可以与用于系统控制逻辑的一个或多个控制器的逻辑一起封装以形成系统级封装。在一个实施例中,处理器中的至少一个可以与用于系统控制逻辑的一个或多个控制器的逻辑集成在相同的管芯上。在一个实施例中,处理器中的至少一个可以与用于系统控制逻辑的一个或多个控制器的逻辑集成在相同的管芯上以形成系统芯片。
装置1100可进一步包括输入/输出装置1105。输入/输出装置1105可包括用户接口旨在使用户与装置1100进行交互,可包括外围组件接口,其被设计为使得外围组件能够与系统交互,和/或,可包括传感器,旨在确定环境条件和/或有关装置1100的位置信息。
Claims (24)
1.一种线程管理方法,其特征在于,包括:
接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象对应指定的应用程序;
根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;
启动所述线程对象,得到对应的线程。
2.如权利要求1所述的方法,其特征在于,所述应用程序中对应多个线程,所述多个线程中的每个线程拥有各自独立的栈以及私有数据区,所述多个线程共享一个堆;其中,一个线程的栈是该线程所占用的内存空间,所述堆是所述应用程序的所有线程共享的内存空间。
3.如权利要求1所述的方法,其特征在于,还包括:
接收动态语言层发送的对全局数据进行读写的指令;
请求获得用于对所述全局变量进行读写的第一同步锁,所述第一同步锁为全局对象;
调用获得到的第一同步锁的加锁方法对所述全局变量进行加锁,对所述全局变量进行读写,并在读写完成后调用所述第一同步锁的解锁方法对所述全局变量进行解锁。
4.如权利要求1所述的方法,其特征在于,还包括:
接收动态语言层发送的执行指定对象提供的指定方法的指令;
确定所述指定方法是否被声明为进行同步互斥;
若是,则请求获得所述指定方法对应的第二同步锁,所述第二同步锁为全局对象;调用获得到的所述第二同步锁的加锁方法对所述指定方法进行加锁,执行所述指定方法,并在执行完成后调用所述第二同步锁的解锁方法对所述指定方法进行解锁。
5.如权利要求1所述的方法,其特征在于,还包括:
接收用于对目标对象进行读写的指令;
若所述目标对象所属的类型为指定类型或被声明为进行同步互斥,则请求获得对所述目标对象进行读写的第三同步锁,所述第三同步锁为全局对象;
调用获得到的所述第三同步锁的加锁方法对所述目标对象进行加锁,对所述目标对象进行读写,并在读写完成后调用所述第三同步锁的解锁方法对所述目标对象进行解锁。
6.如权利要求5所述的方法,其特征在于,请求获得对所述目标对象进行读写的第三同步锁,包括:
获取所述目标对象所在的内存区域中用于存储对象头信息的内存区域中的对象状态标志位,若所述对象状态标志位的取值表明所述目标对象未被加锁,则获得用于对所述目标对象进行读写的第三同步锁;
对所述目标对象进行加锁,包括:
设置所述状态标志位的取值以表明所述目标对象已被加锁;
对所述目标对象进行解锁,包括:
设置所述状态标志位的取值以表明所述目标对象未被加锁。
7.如权利要求1至6中任一项所述的方法,其特征在于,还包括:
将创建得到的线程对象所对应的句柄提供给所述动态语言层。
8.如权利要求1至6中任一项所述的方法,其特征在于,启动所述线程对象,包括:
接收动态语言层发送的启动所述线程对象的指令,所述启动线程对象的指令中包括所述线程对象对应的句柄;
根据所述启动线程对象的指令,通过操作系统调用所述句柄对应的线程对象提供的启动方法,所述启动方法用于根据所述线程对象的运行属性的属性值,执行该属性值所指示的方法。
9.如权利要求1所述的方法,其特征在于,还包括:
接收动态语言层发送的等待线程结束的指令,所述等待线程结束的指令中包括所述线程对象所对应的句柄;
根据接收到的等待线程结束的指令,通过操作系统调用所述句柄对应的线程对象提供的用于等待线程结束的方法来等待线程运行结束。
10.如权利要求1所述的方法,其特征在于,还包括:
接收动态语言层发送的停止线程的指令,所述停止线程的指令中包括所述线程对象所对应的句柄;
根据接收到的停止线程的指令,通过操作系统调用所述句柄对应的线程对象提供的用于停止线程的方法来停止线程运行。
11.如权利要求1至6中任一项所述的方法,其特征在于,所述接收、所述调用和所述启动的操作的执行主体为JavaScript虚拟机,所述动态语言层为JavaScript语言层。
12.一种线程管理装置,其特征在于,包括:
接收模块,用于接收动态语言层发送的创建线程对象指令,所述创建线程对象指令中包括用于创建线程对象的接口,所述线程对象属于指定的应用程序;
管理模块,用于根据所述用于创建线程对象的接口,调用操作系统中所述接口对应的对象所提供的用于创建线程对象的方法,创建得到对应的线程对象;并启动所述线程对象,得到对应的线程。
13.如权利要求12所述的装置,其特征在于,所述应用程序中对应多个线程,所述多个线程中的每个线程拥有各自独立的栈以及私有数据区,所述多个线程共享一个堆;其中,一个线程的栈是该线程所占用的内存空间,所述堆是所述应用程序的所有线程共享的内存空间。
14.如权利要求12所述的装置,其特征在于,所述接收模块还用于:接收动态语言层发送的对全局数据进行读写的指令;
所述管理模块还用于:请求获得用于对所述全局变量进行读写的第一同步锁,所述第一同步锁为全局对象;调用获得到的第一同步锁的加锁方法对所述全局变量进行加锁,对所述全局变量进行读写,并在读写完成后调用所述第一同步锁的解锁方法对所述全局变量进行解锁。
15.如权利要求12所述的装置,其特征在于,所述接收模块还用于:接收动态语言层发送的执行指定对象提供的指定方法的指令;
所述管理模块还用于:确定所述指定方法是否被声明为进行同步互斥;若是,则请求获得所述指定方法对应的第二同步锁,所述第二同步锁为全局对象;调用获得到的所述第二同步锁的加锁方法对所述指定方法进行加锁,执行所述指定方法,并在执行完成后调用所述第二同步锁的解锁方法对所述指定方法进行解锁。
16.如权利要求12所述的装置,其特征在于,所述接收模块还用于:接收用于对目标对象进行读写的指令;
所述管理模块还用于:若所述目标对象所属的类型为指定类型或被声明为进行同步互斥,则请求获得对所述目标对象进行读写的第三同步锁,所述第三同步锁为全局对象;调用获得到的所述第三同步锁的加锁方法对所述目标对象进行加锁,对所述目标对象进行读写,并在读写完成后调用所述第三同步锁的解锁方法对所述目标对象进行解锁。
17.如权利要求16所述的装置,其特征在于,所述管理模块具体用于:获取所述目标对象所在的内存区域中用于存储对象头信息的内存区域中的对象状态标志位,若所述对象状态标志位的取值表明所述目标对象未被加锁,则获得用于对所述目标对象进行读写的第三同步锁;
所述管理模块具体用于:对所述目标对象进行加锁时,设置所述状态标志位的取值以表明所述目标对象已被加锁;
所述管理模块具体用于:对所述目标对象进行解锁时,设置所述状态标志位的取值以表明所述目标对象未被加锁。
18.如权利要求12至17中任一项所述的装置,其特征在于,所述管理模块还用于:将创建得到的线程对象所对应的句柄提供给所述动态语言层。
19.如权利要求12至18中任一项所述的装置,其特征在于,所述管理模块具体用于:接收动态语言层发送的启动所述线程对象的指令,所述启动线程对象的指令中包括所述线程对象对应的句柄;根据所述启动线程对象的指令,通过操作系统调用所述句柄对应的线程对象提供的启动方法,所述启动方法用于根据所述线程对象的运行属性的属性值,执行该属性值所指示的方法。
20.如权利要求12所述的装置,其特征在于,所述接收模块还用于:接收动态语言层发送的等待线程结束的指令,所述等待线程结束的指令中包括所述线程对象所对应的句柄;
所述管理模块还用于:根据接收到的等待线程结束的指令,通过操作系统调用所述句柄对应的线程对象提供的用于等待线程结束的方法来等待线程运行结束。
21.如权利要求12所述的装置,其特征在于,所述接收模块还用于:接收动态语言层发送的停止线程的指令,所述停止线程的指令中包括所述线程对象所对应的句柄;
所述管理模块还用于:根据接收到的停止线程的指令,通过操作系统调用所述句柄对应的线程对象提供的用于停止线程的方法来停止线程运行。
22.如权利要求12至18中任一项所述的装置,其特征在于,所述装置为JavaScript虚拟机,所述动态语言层为JavaScript语言层。
23.一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被一个或多个处理器执行时,使得通信设备执行如权利要求1-11中任一项所述的方法。
24.一种装置,包括:
一个或多个处理器;以及
一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被所述一个或多个处理器执行时,使得所述装置执行如权利要求1-11中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710062788.2A CN108345452B (zh) | 2017-01-23 | 2017-01-23 | 一种线程管理方法及装置 |
TW106137904A TW201828047A (zh) | 2017-01-23 | 2017-11-02 | 線程管理方法及裝置 |
PCT/CN2018/072039 WO2018133713A1 (zh) | 2017-01-23 | 2018-01-10 | 一种线程管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710062788.2A CN108345452B (zh) | 2017-01-23 | 2017-01-23 | 一种线程管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108345452A true CN108345452A (zh) | 2018-07-31 |
CN108345452B CN108345452B (zh) | 2021-07-23 |
Family
ID=62908294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710062788.2A Active CN108345452B (zh) | 2017-01-23 | 2017-01-23 | 一种线程管理方法及装置 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN108345452B (zh) |
TW (1) | TW201828047A (zh) |
WO (1) | WO2018133713A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
CN110465938A (zh) * | 2019-06-28 | 2019-11-19 | 炬星科技(深圳)有限公司 | 状态约束图的读写控制方法、设备及存储介质 |
CN113110928A (zh) * | 2021-04-21 | 2021-07-13 | 合肥宏晶微电子科技股份有限公司 | 多线程启动方法及多线程启动系统 |
CN116700965A (zh) * | 2023-05-30 | 2023-09-05 | 北京瑞泰兴成工程技术有限公司 | 一种基于分布式的数据采集方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514354A (zh) * | 2002-12-31 | 2004-07-21 | ����̩ƽ | 面向构件基于系统内核的进程池/线程池管理方法 |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
US20160378438A1 (en) * | 2010-12-22 | 2016-12-29 | Microsoft Technology Licensing, Llc | Agile communication operator |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1845444B1 (en) * | 2006-04-13 | 2010-05-19 | Microsoft Corporation | Virtual execution system for ressource-constrained devices |
CN103744723B (zh) * | 2014-01-24 | 2019-04-26 | 深圳联友科技有限公司 | 一种线程池的管理方法和管理系统 |
CN105373414B (zh) * | 2014-08-26 | 2018-11-20 | 龙芯中科技术有限公司 | 支持MIPS平台的Java虚拟机实现方法及装置 |
CN104850460A (zh) * | 2015-06-02 | 2015-08-19 | 上海斐讯数据通信技术有限公司 | 一种服务程序线程管理方法 |
-
2017
- 2017-01-23 CN CN201710062788.2A patent/CN108345452B/zh active Active
- 2017-11-02 TW TW106137904A patent/TW201828047A/zh unknown
-
2018
- 2018-01-10 WO PCT/CN2018/072039 patent/WO2018133713A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514354A (zh) * | 2002-12-31 | 2004-07-21 | ����̩ƽ | 面向构件基于系统内核的进程池/线程池管理方法 |
US20160378438A1 (en) * | 2010-12-22 | 2016-12-29 | Microsoft Technology Licensing, Llc | Agile communication operator |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
Non-Patent Citations (1)
Title |
---|
朱文慧: "高级同步技术研究", 《内蒙古科技与经济》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109614220A (zh) * | 2018-10-26 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
CN109614220B (zh) * | 2018-10-26 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种多核系统处理器和数据更新方法 |
US11106795B2 (en) | 2018-10-26 | 2021-08-31 | Advanced New Technologies Co., Ltd. | Method and apparatus for updating shared data in a multi-core processor environment |
CN110465938A (zh) * | 2019-06-28 | 2019-11-19 | 炬星科技(深圳)有限公司 | 状态约束图的读写控制方法、设备及存储介质 |
CN113110928A (zh) * | 2021-04-21 | 2021-07-13 | 合肥宏晶微电子科技股份有限公司 | 多线程启动方法及多线程启动系统 |
CN116700965A (zh) * | 2023-05-30 | 2023-09-05 | 北京瑞泰兴成工程技术有限公司 | 一种基于分布式的数据采集方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
TW201828047A (zh) | 2018-08-01 |
WO2018133713A1 (zh) | 2018-07-26 |
CN108345452B (zh) | 2021-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3667496B1 (en) | Distributed computing system, data transmission method and device in distributed computing system | |
CN110389829B (zh) | 多租户环境中扩展对象的分类与分发 | |
CN105723341B (zh) | 用于布局引擎和脚本引擎的存储器模型的实现方法及系统 | |
KR101581796B1 (ko) | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 | |
JP3704573B2 (ja) | クラスタシステム | |
CN102736945B (zh) | 一种运行应用程序的多个实例的方法和系统 | |
CN108345452A (zh) | 一种线程管理方法及装置 | |
US20070124365A1 (en) | Method, apparatus and program storage device that provides a user mode device interface | |
US20100122253A1 (en) | System, method and computer program product for programming a concurrent software application | |
Feldman et al. | An efficient wait-free vector | |
TW201820131A (zh) | 進程管理方法及裝置 | |
CN114327777B (zh) | 确定全局页目录的方法、装置、电子设备及存储介质 | |
CN110727675A (zh) | 一种链表的处理方法及装置 | |
WO2019108676A1 (en) | Systems and methods of formal verification | |
CN112363779A (zh) | 一种动态链接程序的安全控制方法 | |
CN109740310A (zh) | 用于嵌入式操作系统的内核对象访问方法和装置 | |
KR20080005522A (ko) | 애플리케이션 프레임워크 페이즈화 모델 | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN115983047A (zh) | 一种适用于多图形接口的跨平台的仿真系统 | |
US9038077B1 (en) | Data transfer protection in a multi-tasking modeling environment | |
Castro et al. | Password-capabilities and the Walnut kernel | |
Lamar et al. | Lock-free transactional vector | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
Militão et al. | Composing interfering abstract protocols | |
WO2022155937A1 (zh) | 一种动态链接程序的安全控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201211 Address after: Room 603, 6 / F, Roche Plaza, 788 Cheung Sha Wan Road, Kowloon, China Applicant after: Zebra smart travel network (Hong Kong) Limited Address before: Cayman Islands Grand Cayman capital building, a four storey No. 847 mailbox Applicant before: Alibaba Group Holding Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |