CN111435314A - 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 - Google Patents
一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 Download PDFInfo
- Publication number
- CN111435314A CN111435314A CN201910025492.2A CN201910025492A CN111435314A CN 111435314 A CN111435314 A CN 111435314A CN 201910025492 A CN201910025492 A CN 201910025492A CN 111435314 A CN111435314 A CN 111435314A
- Authority
- CN
- China
- Prior art keywords
- function
- asynchronous
- executed
- task
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000000903 blocking effect Effects 0.000 title claims abstract description 27
- 230000006870 function Effects 0.000 claims description 166
- 230000007717 exclusion Effects 0.000 claims description 35
- 238000004590 computer program Methods 0.000 claims description 17
- 230000007246 mechanism Effects 0.000 abstract description 7
- 230000004044 response Effects 0.000 abstract description 3
- 230000001360 synchronised effect Effects 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,通过任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式。能保证线程在异步消息到来之前不会继续执行当前调用栈,并且不会造成无响应状态,实现方式简单,不与当前线程具体业务逻辑耦合。
Description
技术领域
本发明涉及软件工程领域,具体涉及一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质。
背景技术
线程阻塞是线程在执行耗时操作时处于无响应状态,无法处理线程中其他任务。异步函数是执行函数调用后立即返回,但操作的结果在未来某个时刻通知调用方。
程序的运行实际是由若干线程完成的,这其中包括主线程和其他工作线程。线程有时需要等待某个异步函数调用结果后再继续运行当前调用栈,而这些异步函数结果是在未来某个不确定时间返回的,这就导致线程需要处于等待状态,而该过程会造成该线程阻塞无响应。
现有办法首先在异步消息来临时再执行线程的后续操作,该方法存在后续操作不易封装界定的问题,同时也将增大线程逻辑和异步函数的耦合,且短暂容忍线程阻塞。
发明内容
鉴于现有技术存在的问题,本发明的目的是提供一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,结合任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式。
为了实现上述目的,本发明采用的技术方案为一种不阻塞线程等待异步消息的方法,所述方法包括以下步骤:
S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
S4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
在上述技术方案中,所述步骤S2中线程中若未找到待执行Task,则进入休眠状态,等待新的Task。
在上述技术方案中,所述步骤S3标记异步函数包括以下步骤:
S31、在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
S32、当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
在上述技术方案中,所述步骤S4通过调用互斥对象中的Try Lock函数,进行非阻塞的判断异步函数是否执行完毕。
在上述技术方案中,判断异步函数执行完毕包括以下步骤:
S41、若Try Lock函数返回False,则表示异步函数尚未执行完毕;
S42、若Try Lock函数返回True,则表示异步函数执行完毕。
本发明还公开一种不阻塞线程等待异步消息的系统,所述系统包括创建模块、查找模块、标记模块以及执行模块;
创建模块,用于在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
查找模块,用于线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
标记模块,用于任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
执行模块,用于在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行查找模块,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
在上述技术方案中,所述标记模块包括:
Lock模块,用于在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
UNLock模块,用于当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
在上述技术方案中,所述执行模块中包括:
False模块,用于判断若Try Lock函数返回False,则表示异步函数尚未执行完毕;
True模块,用于判断若Try Lock函数返回True,则表示异步函数执行完毕。
本发明还公开一种不阻塞线程等待异步消息的系统的服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述一种不阻塞线程等待异步消息的方法的步骤。
本发明还公开一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述任一项所述一种不阻塞线程等待异步消息的方法的步骤。
本发明一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,具有以下有益效果:本发明通过结合任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式,能保证线程在异步消息到来之前不会继续执行当前调用栈,并且不会造成无响应状态,实现方式简单,不与当前线程具体业务逻辑耦合。
附图说明
图1为本发明实施例一提供的一种不阻塞线程等待异步消息的方法的流程图;
图2本发明实施例二提供一种不阻塞线程等待异步消息的系统模块图;
图3为本发明实施例三提供的服务器的结构示意图。
具体实施方式
本发明提供一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明如图1所示实施例一提供一种不阻塞线程等待异步消息的方法,所述方法包括以下步骤:
S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
其中,任务队列TaskQueue负责开始任务、添加任务、清空任务、开始任务回调、完成队列中所有任务回调、下一个任务、当前任务进度以及队列存储所有任务。
S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
可选的,第一循环函数为While函数。
其中,所述步骤S2中线程中若未找到待执行Task,则进入休眠状态,等待新的Task。
S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
可选的,创建的互斥对象为Mutex,互斥(Mutex)是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。与其他几种内核对象不同,互斥对象在操作系统中拥有特殊代码,并由操作系统来管理,操作系统甚至还允许其进行一些其他内核对象所不能进行的非常规操作。只有拥有互斥对象并得以进入到共享资源,而其他线程则会被排斥在外。当此线程处理完共享资源并准备离开此区域时将把其所拥有的互斥对象交出,其他任何一个试图访问此资源的线程都有机会得到此互斥对象。
所述Mutex当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
其中,所述步骤S3标记异步函数包括以下步骤:
S31、在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
其中,lock函数为互斥锁被锁定。线程申请该互斥锁,如果未能获得该互斥锁,则调用线程将阻塞(block)在该互斥锁上;如果成功获得该互诉锁,该线程一直拥有该互斥锁直到调用unlock解锁;
S32、当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
其中,unlock函数为解锁,释放调用线程对该互斥锁的所有权。
假设Mutex变量的值为1表示互斥锁空闲,这时某个进程调用lock可以获得锁,而Mutex的值为0表示互斥锁已经被某个线程获得,其它线程再调用lock只能挂起等待,大多数结构都提供swap或exchange指令,该指令的作用是把寄存器和内存单元数据交换,由于只有一条指令,确保原子性,即使多处理器平台,访问内存的总线周期亦有先后,一个处理器执行交换指令时,另一处理器只能等待总线周期。
每个Mutex都有一个等待队列,一个线程在mutex上挂起等待,首先把自己加入等待队列中,然后致线程状态为睡眠,然后调用调度函数切换到别的线程。一个线程要唤醒别的线程,需从等待队列取出一项,把它状态从睡眠改为就绪,放入就绪队列。下次调度函数就有可能切换到该线程。
其中,如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成,当一个线程调用的是一个异步函数(该函数用于完成写文件任务),该函数会立即返回尽管其规定的任务还没有完成,这样线程就会执行异步函数的下一条语句,而不会被挂起。那么该异步函数所规定的工作通过另外一个线程完成;异步调用时,调用方不等被调方返回结果就转身离去,因此必须有一种机制让被调方有了结果时能通知调用方。在同一进程中有很多手段可以利用,常用的手段是回调、Event对象和消息,回调方式很简单,调用异步函数时在参数中放入一个函数地址,异步函数保存此地址,待有了结果后回调此函数便可以向调用方发出通知。如果把异步函数包装进一个对象中,可以用事件取代回调函数地址,通过事件处理例程向调用方发通知。Event是Windows系统提供的一个常用同步对象,以在异步处理中对齐不同线程之间的步点。如果调用方暂时无事可做,可以调用Wait函数等在那里,此时Event处于Nonsignaled状态。当被调方出来结果之后,把Event对象置于Signaled状态,Wait函数便自动结束等待,使调用方重新动作起来,从被调方取出处理结果。这种方式比回调方式要复杂一些,速度也相对较慢,但有很大的灵活性,可以搞出很多花样以适应比较复杂的处理系统。消息是借助Windows消息发通知是个不错的选择,既简单又安全。程序中定义一个用户消息,并由调用方准备好消息处理例程。被调方出来结果之后立即向调用方发送此消息,并通过WParam和LParam这两个参数传送结果。消息总是与窗口handle关联,因此调用方必须借助一个窗口才能接收消息,这是其不方便之处。另外,通过消息联络会影响速度,需要高速处理时回调方式更有优势。
S4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
其中,所述第二循环函数为While函数。
其中,所述步骤S4通过调用互斥对象中的Try Lock函数,进行非阻塞的判断异步函数是否执行完毕;所述非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。其中,等待异步线程处理任务的时候,通过while循环不停判断异步线程是否完成,如果没有完成就继续从任务队列取任务进行工作,这样可以达到即等待异步线程结果,又不会阻塞线程。
具体的,判断异步函数执行完毕包括以下步骤:
S41、若Try Lock函数返回False,则表示异步函数尚未执行完毕;
S42、若Try Lock函数返回True,则表示异步函数执行完毕。
本发明实施例二如图2所示还提供一种不阻塞线程等待异步消息的系统,所述系统包括创建模块、查找模块、标记模块以及执行模块;
创建模块,用于在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
查找模块,用于线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
标记模块,用于任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
执行模块,用于在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行查找模块,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
其中,所述标记模块包括:
Lock模块,用于在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
UNLock模块,用于当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
其中,所述执行模块中包括:
False模块,用于判断若Try Lock函数返回False,则表示异步函数尚未执行完毕;
True模块,用于判断若Try Lock函数返回True,则表示异步函数执行完毕。
本发明实施例三如图3所示提供一种不阻塞线程等待异步消息的系统的服务器结构示意图,所述实施例的服务器包括:处理器30、存储器31以及存储在所述存储器31中并可在所述处理器30上运行的计算机程序32。所述处理器30执行所述计算机程序32时实现上述各方法实施例中的步骤,所述处理器30执行所述计算机程序32时实现上述装置实施例中各模块的功能。
所述一种不阻塞线程等待异步消息的系统的服务器可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备,所述一种不阻塞线程等待异步消息的系统的服务器可包括,但不限于,处理器30、存储器31。图3仅仅是对此服务器的示例,并不构成对此服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,所述一种不阻塞线程等待异步消息的系统的服务器还可以包括输入输出设备33、显示设备34等。
所述处理器30可以是中央处理单元,还可以是其他通用处理器、数字信号处理器、专用集成电路、现成可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器31可以是所述一种不阻塞线程等待异步消息的系统的服务器的内部存储单元、硬盘或内存。所述存储器31也可以是所述服务器的外部存储设备,或配备的插接式硬盘,智能存储卡,安全数字卡,闪存卡等。
进一步地,所述存储器31还可以既包括所述服务器的内部存储单元也包括外部存储设备。所述存储器31用于存储所述计算机程序以及所述电子设备所需的其他程序和数据。所述存储器31还可以用于暂时地存储已经输出或者将要输出的数据。
所述的输入输出设备33可用于接收输入的数字或字符信息,具体的,输入输出设备33还可以包括但不限于键盘、鼠标、操作杆等中的一种和多种。
所述的显示设备34可用于显示由用户输入的信息或提供给用户信息以及终端的各种菜单,显示设备34可包括显示面板,可选的,可采用液晶显示器。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种不阻塞线程等待异步消息的方法,其特征在于,所述方法包括以下步骤:
S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记,;
S4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
2.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S2中线程中若未找到待执行Task,则进入休眠状态,等待新的Task。
3.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S3标记异步函数包括以下步骤:
S31、在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
S32、当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
4.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S4通过调用互斥对象中的Try Lock函数,进行非阻塞的判断异步函数是否执行完毕。
5.根据权利要求4所述一种不阻塞线程等待异步消息的方法,其特征在于,判断异步函数执行完毕包括以下步骤:
S41、若Try Lock函数返回False,则表示异步函数尚未执行完毕;
S42、若Try Lock函数返回True,则表示异步函数执行完毕。
6.一种不阻塞线程等待异步消息的系统,其特征在于,所述系统包括创建模块、查找模块、标记模块以及执行模块;
创建模块,用于在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
查找模块,用于线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
标记模块,用于任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
执行模块,用于在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行查找模块,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
7.根据权利要求6所述一种不阻塞线程等待异步消息的系统,其特征在于,所述标记模块包括:
Lock模块,用于在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
UNLock模块,用于当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
8.根据权利要求6所述一种不阻塞线程等待异步消息的系统,其特征在于,所述执行模块中包括:
False模块,用于判断若Try Lock函数返回False,则表示异步函数尚未执行完毕;
True模块,用于判断若Try Lock函数返回True,则表示异步函数执行完毕。
9.一种不阻塞线程等待异步消息的系统的服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述一种不阻塞线程等待异步消息的方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述一种不阻塞线程等待异步消息的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910025492.2A CN111435314A (zh) | 2019-01-11 | 2019-01-11 | 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910025492.2A CN111435314A (zh) | 2019-01-11 | 2019-01-11 | 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111435314A true CN111435314A (zh) | 2020-07-21 |
Family
ID=71580261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910025492.2A Pending CN111435314A (zh) | 2019-01-11 | 2019-01-11 | 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111435314A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111913809A (zh) * | 2020-07-28 | 2020-11-10 | 北京百度网讯科技有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
CN113360302A (zh) * | 2021-08-10 | 2021-09-07 | 成都市奇点软件有限公司 | 一种耗时操作取消及阻塞异步转换的方法及系统 |
CN114528128A (zh) * | 2022-04-24 | 2022-05-24 | 广州世炬网络科技有限公司 | 应用进程的输入输出多路复用方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455933A (zh) * | 2010-10-22 | 2012-05-16 | 深圳市科陆电子科技股份有限公司 | 一种通过线程管理提高多任务处理效率的方法 |
US20120260261A1 (en) * | 2011-04-07 | 2012-10-11 | Microsoft Corporation | Asynchronous callback driven messaging request completion notification |
CN105511969A (zh) * | 2015-11-25 | 2016-04-20 | 中国船舶工业系统工程研究院 | 一种跨进程的线程间进行互斥的方法 |
CN107491350A (zh) * | 2017-09-05 | 2017-12-19 | 武汉斗鱼网络科技有限公司 | 接口任务调用方法及装置 |
CN107770258A (zh) * | 2017-10-10 | 2018-03-06 | 许继电气股份有限公司 | 一种异步调用转同步调用的实现方法 |
CN109117201A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
-
2019
- 2019-01-11 CN CN201910025492.2A patent/CN111435314A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455933A (zh) * | 2010-10-22 | 2012-05-16 | 深圳市科陆电子科技股份有限公司 | 一种通过线程管理提高多任务处理效率的方法 |
US20120260261A1 (en) * | 2011-04-07 | 2012-10-11 | Microsoft Corporation | Asynchronous callback driven messaging request completion notification |
CN105511969A (zh) * | 2015-11-25 | 2016-04-20 | 中国船舶工业系统工程研究院 | 一种跨进程的线程间进行互斥的方法 |
CN107491350A (zh) * | 2017-09-05 | 2017-12-19 | 武汉斗鱼网络科技有限公司 | 接口任务调用方法及装置 |
CN107770258A (zh) * | 2017-10-10 | 2018-03-06 | 许继电气股份有限公司 | 一种异步调用转同步调用的实现方法 |
CN109117201A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
Non-Patent Citations (2)
Title |
---|
AMEYUME: "Mutex的lock(), unlock(), tryLock()函数介绍", pages 1, Retrieved from the Internet <URL:https://blog.csdn.net/ameyume/article/details/7567810> * |
HK ZHANG: "使用Nito.AsyncEx实现异步锁", pages 1, Retrieved from the Internet <URL:https://www.cnblogs.com/1zhk/p/5269279.html> * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111913809A (zh) * | 2020-07-28 | 2020-11-10 | 北京百度网讯科技有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
CN111913809B (zh) * | 2020-07-28 | 2024-03-19 | 阿波罗智能技术(北京)有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
CN113360302A (zh) * | 2021-08-10 | 2021-09-07 | 成都市奇点软件有限公司 | 一种耗时操作取消及阻塞异步转换的方法及系统 |
CN114528128A (zh) * | 2022-04-24 | 2022-05-24 | 广州世炬网络科技有限公司 | 应用进程的输入输出多路复用方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111435314A (zh) | 一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质 | |
JPH0535453B2 (zh) | ||
CN109213576B (zh) | 程序死锁检测方法、存储介质、设备及系统 | |
CN113010275B (zh) | 一种中断处理方法和装置 | |
CN107479981B (zh) | 一种基于异步调用实现同步调用的处理方法及装置 | |
CN114564435A (zh) | 异构多核芯片的核间通信方法、装置及介质 | |
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN116302708A (zh) | 基于负载均衡的数据备份方法、装置、设备及存储介质 | |
US10740158B2 (en) | Synchronization object aborting systems and methods | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN113485840A (zh) | 基于Go语言的多任务并行处理装置及方法 | |
JP5067723B2 (ja) | 情報処理装置、情報処理方法およびプログラム | |
US10430234B2 (en) | Thread coordination in a rule engine using a state machine | |
US9354890B1 (en) | Call stack structure for enabling execution of code outside of a subroutine and between call stack frames | |
EP1826671A2 (en) | Interruptible thread synchronization method and apparatus | |
WO2020082354A1 (zh) | 一种系统状态检测方法、系统状态装置及终端设备 | |
CN114327828B (zh) | 一种共享数据的无锁并发访问方法、装置、设备及介质 | |
JP6962717B2 (ja) | 情報処理装置、情報処理方法および情報処理プログラム | |
US10817349B2 (en) | Wake-up ordering of processing streams using sequential identifiers | |
CN112131009A (zh) | 一种内存调度方法、装置及计算机可读存储介质 | |
CN118093211A (zh) | 一种分布式锁的处理方法、装置、设备及介质 | |
CN115951987A (zh) | 一种存储系统中多线程的任务执行方法、装置以及介质 | |
CN115391005A (zh) | 一种Linux实时处理方法及装置、设备和介质 | |
CN114510336A (zh) | 一种单线程资源调度方法、装置、设备以及存储介质 | |
US9853908B2 (en) | Utilizing access control data structures for sharing computing resources |
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 |