CN102867018A - 一种数据库系统中线程间的模拟信号通信方法 - Google Patents

一种数据库系统中线程间的模拟信号通信方法 Download PDF

Info

Publication number
CN102867018A
CN102867018A CN2012102650645A CN201210265064A CN102867018A CN 102867018 A CN102867018 A CN 102867018A CN 2012102650645 A CN2012102650645 A CN 2012102650645A CN 201210265064 A CN201210265064 A CN 201210265064A CN 102867018 A CN102867018 A CN 102867018A
Authority
CN
China
Prior art keywords
thread
signal
threadinfo
processing function
messages
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
Application number
CN2012102650645A
Other languages
English (en)
Other versions
CN102867018B (zh
Inventor
李书淦
李�浩
赵伟
郑程光
孙伟丰
罗正海
李泉
程仁波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Founder Digital Publishing Technology (Shanghai) Co.,Ltd.
Founder Information Industry Holdings Co Ltd
Peking University Founder Group Co Ltd
Original Assignee
FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD filed Critical FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO LTD
Priority to CN201210265064.5A priority Critical patent/CN102867018B/zh
Publication of CN102867018A publication Critical patent/CN102867018A/zh
Application granted granted Critical
Publication of CN102867018B publication Critical patent/CN102867018B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据库系统中线程间的模拟信号通信方法,包括:数据库系统下直接设置一信号管理器,信号管理器中设置并存储各个线程的线程消息ThreadInfo,在该线程消息ThreadInfo中设置本线程可接收并处理不同信号信息,并设置不同信号对应的标识;在线程开始时注册本线程各个信号所对应的处理函数信息;当某一线程需要给目标线程发送信号时,在该目标线程的线程消息ThreadInfo中修改该信号对应标识;该目标线程接收该标识,并通过该信号对于应的处理函数进行处理。本发明实施方式的线程间的模拟信号通信方法,采用类似进程间通信的信号机制,由信号管理器统一管理和调度各线程信号处理函数,去除了代码中为通信而定义的大量状态变量,使得各线程的任务单一化,从而使得代码的更强的可读性和可维护性,技术方案简单,方便实用。

Description

一种数据库系统中线程间的模拟信号通信方法
技术领域
本发明涉及通信技术领域,特别涉及一种数据库系统中线程间的模拟信号通信方法。
背景技术
随着现代信息产业的不断深入发展,对于信息的集成和共享的需求也变得日益迫切。为了增大吞吐量,提高CPU的利用率,服务器端的程序一般都会采用多线程技术或者多进程技术。相对于单线程/进程来说,多进程/线程模式的效率更高,但是随之而来的,程序复杂性会急剧增大,因为多个线程/进程为了完成特定的功能必须要相互协作,也就是它们需要同步和通信。
在unix系统中,进程间的通信可以通过信号来实现,在进程启动时,首先调用signal(signo,handle)注册信号处理函数,然后等待其他进程发送信号来作出相应的动作。这种机制非常地方便。而对于多线程来说,通常是通过全局变量来实现的,工作线程通过检测全局变量值的变化来作出相应的动作。这种方式在简单的应用中已经足够了,但是在像数据库系统这种复杂的系统中使用将会使得代码的可读性及可维护性下降。这种通过全局状态变量来通信的做法,对于线程数量少,通信需求不大的情形来说已经足够了,但是对于数据库这种复杂的系统来说,这种技术方案主要有以下几个缺点:全局变量泛滥;代码的可读性下降;可维护性下降;代码的复杂性增加,难以测试等。
以某一XML数据库使用多线程模式为例,其中涉及的线程主要包括:
1.Mater线程:接收客户端请求,并启动Backend线程来处理这些请求;
2.Backend线程:解析并处理客户端的请求;
3.BgWriter线程:将对数据库的改动写回磁盘;
4.WalLogger线程:写日志
这些线程之间的协作需要大量的通信,比如WalLogger线程会通知BgWriter线程,让其写磁盘或者是做check point,大多数这种通信都是告知性质的。对于这种情况,为了实现他们之间的通信,就会定义大量的全局状态变量,比如说,BgWriter为了判断是否要写磁盘就需要一个bool型的全局变量:Bool g_bNeedSync2Disk;而WalLogger在需要写磁盘时就是将这个变量设置成true,从而就达到了通知BgWriter写磁盘的目的。
这种通过全局状态变量来通信的做法,对于线程数量少,通信需求不太太的情况来说实现起来还方便,但是对于数据库这种复杂的系统来说,定义过多的全局变量就使得整个系统的代码可读性下降、可维护性差。
发明内容
为解决上述问题,本发明技术方案提供了一种数据库管理系统中线程间的模拟信号通信方法,包括:
数据库系统下直接设置一信号管理器,信号管理器中设置并存储各个线程的线程消息ThreadInfo,在该线程消息ThreadInfo中设置本线程可接收并处理不同信号信息,并设置不同信号对应的标识;
在线程开始时注册本线程各个信号所对应的处理函数信息;
当某一线程需要给目标线程发送信号时,在该目标线程的线程消息ThreadInfo中修改该信号对应标识;
该目标线程接收该标识,并通过该信号对于应的处理函数进行处理。
可选地,线程消息ThreadInfo通过位置信息来设置不同信息对应的标识,每一位表示一信号及对应的处理函数;
当某一线程需要给该目标线程发送信号时,先找到该目标线程对应的线程消息ThreadInfo,再找到该信号所在的位置,后将该位置进行修改;
当该目标线程处理好该信号后,将该线程消息ThreadInfo对应位置信息重新进行修改。
可选地,在该线程消息ThreadInfo中设置一信号队列signalQueue,该队列每一位的位置上表示对应的处理函数,每一位置上的数字N表示当前接收到N个线程发送当前处理函数需处理的该信号。
可选地,signalQueue有32位,每一位对应一处理函数,并且处理函数的处理结果有两种状态。
可选地,所述的信号处理器通过设置所述发送线程的信号队列控制所述发送线程处理模拟信号。
与现有技术相比,上述技术方案具有下优点:
本发明实施方式的线程间的模拟信号通信方法,采用类似进程间通信的信号机制,由信号管理器统一管理和调度各线程信号处理函数,去除了代码中为通信而定义的大量状态变量,使得各线程的任务单一化,从而使得代码的更强的可读性和可维护性,技术方案简单,方便实用。
附图说明
图1是本发明实施方式的数据库管理系统中线程间的模拟信号通信方法的流程图;
图2是本发明实施方式的数据库管理系统中线程间的模拟信号通信方法中的信号管理器与数组结构之间的关系示意图;
图3是本发明的实施方式的数据库管理系统中的线程间的模拟信号通信方法的一个应用例示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
本领域的技术人员知道,在unix系统中,进程间的通信可以通过信号来实现,在进程启动时,首先调用signal(signo,handle)注册信号处理函数,然后等待其他进程发送信号来作出相应的动作。这种机制非常地方便。而对于多线程来说,通常是通过全局变量来实现的,工作线程通过检测全局变量值的变化作出相应的动作。这种方式在简单的应用中已经足够了,但是在像数据库系统这种复杂的系统中使用将会使得代码的可读性及可维护性下降。
为解决现有技术中的问题,本发明的发明人经过研究,提出了一种线程间的模拟信号通信方法。参阅图1,图1是本发明实施方式的数据库管理系统中线程间的模拟信号通信方法的流程图。本发明实施方式的线程间的数据库管理系统中线程间的模拟信号通信方法,包括:
数据库系统下直接设置一信号管理器,信号管理器中设置并存储各个线程的线程消息ThreadInfo,在该线程消息ThreadInfo中设置本线程可接收并处理不同信号信息,并设置不同信号对应的标识;
在线程开始时注册本线程各个信号所对应的处理函数信息;
当某一线程需要给目标线程发送信号时,在该目标线程的线程消息ThreadInfo中修改该信号对应标识;
该目标线程接收该标识,并通过该信号对于应的处理函数进行处理。
下面结合说明书附图对本发明实施方式的线程间的模拟信号通信方法做进一步详细的说明。
应用例
一种数据库系统中线程间的模拟信号通信方法,包括:
S11:数据库系统下直接设置一信号管理器,信号管理器中设置并存储各个线程的线程消息ThreadInfo,在该线程消息ThreadInfo中设置本线程可接收并处理不同信号信息,并设置不同信号对应的标识。
信号管理器直接设置在系统下面,其可以为一大数组或一队列。各个线程设置一线程消息ThreadInfo。信号管理器为每个线程维护着一个结构ThreadInfo。
还请参阅图2,其给出的是一个最多支持256个线程通信的实例,同进从图中可以看出,当前一共管理着两个线程的通信信息。
其中ThreadInfo的定义的实例如下:
Figure BDA00001942105000041
一个线程对应一个ThreadInfo,每个ThreadInfo可以设置一signalQueue。signalQueue,该队列每一位的位置上表示对应的处理函数,每一位置上的数字N表示当前接收到N个线程发送当前处理函数需处理的该信号。比如,某一线程的第三位表示对该数据库的改动写回磁盘,则线程检测到第三位不为“0”时,即启动对该数据库的改动写回磁盘所对应的处理函数,处理完毕后,并将该第三位设置为“0”。
S12:在线程开始时注册本线程各个信号所对应的处理函数信息;
每一位表示哪个处理函数,需要线程可预先识别,则定义该处理函数之初,就先在线程开始时注册。比如
为了处理其他线程发送来的信号,程序员要做的只是在线程开始时调用thread_signal(signo,handle)注册信号处理函数。其申明如下:
void thread_signal(int signo,ThreadSigHandler handle);
S13:当某一线程需要给目标线程发送信号时,在该目标线程的线程消息ThreadInfo中修改该信号对应标识;
S14:该目标线程接收该标识,并通过该信号对于应的处理函数进行处理。
即:线程消息ThreadInfo通过位置信息来设置不同信息对应的标识,每一位表示一信号及对应的处理函数;当某一线程需要给该目标线程发送信号时,先找到该目标线程对应的线程消息ThreadInfo,再找到该信号所在的位置,后将该位置进行修改;当该目标线程处理好该信号后,将该线程消息ThreadInfo对应位置信息重新进行修改。
更进一步地,在该线程消息ThreadInfo中设置一信号队列signalQueue,该队列每一位的位置上表示对应的处理函数,每一位置上的数字N表示当前接收到N个线程发送当前处理函数需处理的该信号。signalQueue有32位,每一位对应一处理函数,并且处理函数的处理结果有两种状态。
所述的信号处理器通过设置所述发送线程的信号队列控制所述发送线程处理模拟信号。
也就是说,在线程中第一次调用这个函数的时候,会创建一个ThreadInfo的实例并注册到信号管理器ThreadSigMgr中。
现在线程可以进入一个死循环,等待别的线程发送信号:
第一个函数会一直等待,直到收到信号时返回,其返回值永远为true;而thread_process_signals会根据发来的信号,调用相应的处理函数,并将signalQueue置空。
接收信号的线程现在已经作好了准备,其他线程可以通过调用thread_kill(tid,signo)发送一个信号给它。然后接收线程就能够像机械一样正常运行了。
thread_kill的申明如下:
int thread_kill(pthread_t tid,int signo);
这个函数给id为tid的线程发送一个signo的信号,如果这个线程不存在,thread_kill会返回-1,否则返回0。
有了这个机制,程序员只要把主要精力放在编写处理函数之上,大大简化了代码的复杂度。
图3给出了一个使用本通信方法进行通信的例子,在这个实例之中,参与通信的是两个线程:Master线程和BgWriter线程,Master线程接收并处理从客户端发过来的请求并适时地发送信号给BgWriter,让其写磁盘。BgWriter线程在启动的时候首先注册了两个信号处理函数:0--sync2Disk,1--exitThread,然后进入到了信号处理循环,如果thread_wait返回了,thread_process_signals中就会去检查是否接收到信号0,如果接收到了,就调用sync2Disk将来Master线程作的改动写回磁盘,然后再检查是否接收到信号1,如果接收到了就会调用exitThread,在这里也的响应是退出线程。
综上所述,本发明技术方案具有下优点:
本发明实施方式的线程间的模拟信号通信方法,采用类似进程间通信的信号机制,由信号管理器统一管理和调度各线程信号处理函数,去除了代码中为通信而定义的大量状态变量,使得各线程的任务单一化,从而使得代码的更强的可读性和可维护性,技术方案简单,方便实用。
应当理解的是这里所描述的方法和系统可以以各种形式的硬件、软件、固件、专用处理机或者它们的组合实现。尤其是,至少本发明的一部分包括程序指令的应用程序优选实现。这些程序指令被确实地包括在一个或者多个程序存储设备(包括但不限于硬盘,磁性软盘,RAM,ROM,CD,ROM等)里,并且可由任何包括适当结构的设备或者机器,例如一种具有处理器、内存和输入/输出接口的通用数字计算机执行。还应当理解由于附图中描述的一些系统的组成部件和处理步骤优选地以软件实现,所以,系统模块(或者方法步骤的逻辑流程)之间的连接可能不同,这取决于本发明的编程方式。根据这里给出的指导,相关领域的普通技术人员将能够设计出本发明的这些以及类似的实施方式。
以上公开了本发明的多个方面和实施方式,本领域的技术人员会明白本发明的其它方面和实施方式。本发明中公开的多个方面和实施方式只是用于举例说明,并非是对本发明的限定,本发明的真正保护范围和精神应当以权利要求书为准。

Claims (5)

1.一种数据库系统中线程间的模拟信号通信方法,其特征在于,包括:
数据库系统下直接设置一信号管理器,所述信号管理器中设置并存储各个线程的线程消息ThreadInfo,在该线程消息ThreadInfo中设置本线程可接收并处理不同信号信息,并设置不同信号对应的标识;
在线程开始时注册本线程各个信号所对应的处理函数信息;
当某一线程需要给目标线程发送信号时,在该目标线程的线程消息ThreadInfo中修改该信号的对应标识;
该目标线程接收该标识,并通过该信号对相应的处理函数进行处理。
2.如权利要求1所述的方法,其特征在于,
线程消息ThreadInfo通过位置信息来设置不同信息对应的标识,每一位表示一模拟信号及对应的处理函数;
当某一线程需要给该目标线程发送信号时,先找到该目标线程对应的线程消息ThreadInfo,再找到该信号所在的位置,后将该位置进行修改;
当该目标线程处理好该信号后,将该线程消息ThreadInfo对应位置信息重新进行修改。
3.如权利要求2所述的方法,其特征在于,
在该线程消息ThreadInfo中设置一信号队列signalQueue,该队列每一位的位置上表示对应的处理函数,每一位置上的数字N表示当前接收到N个线程发送当前处理函数需处理的该信号。
4.如权利要求3所述的方法,其特征在于,信号队列signalQueue有32位,每一位对应一处理函数,并且处理函数的处理结果有两种状态。
5.如权利要求4所述的线程间的模拟信号通信方法,其特征在于,所述的信号处理器通过设置所述发送线程的信号队列控制所述发送线程处理模拟信号。
CN201210265064.5A 2012-07-27 2012-07-27 一种数据库系统中线程间的模拟信号通信方法 Expired - Fee Related CN102867018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210265064.5A CN102867018B (zh) 2012-07-27 2012-07-27 一种数据库系统中线程间的模拟信号通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210265064.5A CN102867018B (zh) 2012-07-27 2012-07-27 一种数据库系统中线程间的模拟信号通信方法

Publications (2)

Publication Number Publication Date
CN102867018A true CN102867018A (zh) 2013-01-09
CN102867018B CN102867018B (zh) 2015-04-22

Family

ID=47445887

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210265064.5A Expired - Fee Related CN102867018B (zh) 2012-07-27 2012-07-27 一种数据库系统中线程间的模拟信号通信方法

Country Status (1)

Country Link
CN (1) CN102867018B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104539698A (zh) * 2014-12-29 2015-04-22 哈尔滨工业大学 一种基于延时修正的多线程套接字同步通信接入方法
CN109101456A (zh) * 2018-08-30 2018-12-28 浪潮电子信息产业股份有限公司 一种仿真ssd中的数据交互通信方法、装置及终端
CN115658349A (zh) * 2022-11-17 2023-01-31 南京天创电子技术有限公司 一种基于信号的线程间通信方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004030312A (ja) * 2002-06-26 2004-01-29 Mitsubishi Electric Corp マルチスレッド同期制御方式
CN1716209A (zh) * 2004-06-28 2006-01-04 英特尔公司 线程到线程通信
CN1949206A (zh) * 2005-10-12 2007-04-18 大唐移动通信设备有限公司 多处理器系统的消息通信方法及装置
CN102591726A (zh) * 2011-12-31 2012-07-18 青岛海信宽带多媒体技术有限公司 一种多进程通信方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004030312A (ja) * 2002-06-26 2004-01-29 Mitsubishi Electric Corp マルチスレッド同期制御方式
CN1716209A (zh) * 2004-06-28 2006-01-04 英特尔公司 线程到线程通信
CN1949206A (zh) * 2005-10-12 2007-04-18 大唐移动通信设备有限公司 多处理器系统的消息通信方法及装置
CN102591726A (zh) * 2011-12-31 2012-07-18 青岛海信宽带多媒体技术有限公司 一种多进程通信方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104539698A (zh) * 2014-12-29 2015-04-22 哈尔滨工业大学 一种基于延时修正的多线程套接字同步通信接入方法
CN104539698B (zh) * 2014-12-29 2018-01-26 哈尔滨工业大学 一种基于延时修正的多线程套接字同步通信接入方法
CN109101456A (zh) * 2018-08-30 2018-12-28 浪潮电子信息产业股份有限公司 一种仿真ssd中的数据交互通信方法、装置及终端
CN109101456B (zh) * 2018-08-30 2021-10-15 浪潮电子信息产业股份有限公司 一种仿真ssd中的数据交互通信方法、装置及终端
CN115658349A (zh) * 2022-11-17 2023-01-31 南京天创电子技术有限公司 一种基于信号的线程间通信方法

Also Published As

Publication number Publication date
CN102867018B (zh) 2015-04-22

Similar Documents

Publication Publication Date Title
CN106802826B (zh) 一种基于线程池的业务处理方法及装置
CN107688500B (zh) 一种分布式任务处理方法、装置、系统及设备
CN100530107C (zh) 基于io事件通知机制的单进程内容服务器装置及方法
CN109040152B (zh) 一种基于服务编排的服务请求和提供方法、装置以及电子设备
US10095556B2 (en) Parallel priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications
JP2019523462A (ja) マルチタスクスケジューリング方法、システム、アプリケーションサーバ及びコンピュータの読み取り可能な記憶媒体
CN101197812B (zh) 一种实现页面调用的系统及方法
CN105095365A (zh) 一种信息流数据的处理方法和装置
CN103930875A (zh) 用于加速业务数据处理的软件虚拟机
WO2019047441A1 (zh) 一种通信优化方法及系统
CN107479981B (zh) 一种基于异步调用实现同步调用的处理方法及装置
CN105183698A (zh) 一种基于多核dsp的控制处理系统和方法
CN101093454A (zh) 一种在分布式系统中执行sql脚本文件的方法和装置
CN110795150A (zh) 依dmb操作用加载/存储操作实施加载撷取/存储释放指令
CN102867018B (zh) 一种数据库系统中线程间的模拟信号通信方法
CN104239508A (zh) 数据查询方法和装置
CN1945541A (zh) 处理操作信息传送控制系统和方法
CN101216770A (zh) 一种工作流引擎
CN109819674B (zh) 计算机存储介质、嵌入式调度方法及系统
CN107291938B (zh) 订单查询系统及方法
CN116680209A (zh) 基于wasm的多智能合约实例管理方法
EP3792757A1 (en) Method, apparatus, device, and storage medium for performing processing task
CN111489202B (zh) 一种发送电子券的方法及装置
US9684685B2 (en) Using message-passing with procedural code in a database kernel
CN106844036B (zh) 物理设备的访问方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: BEIDA FANGZHENG GROUP CO. LTD.

Free format text: FORMER OWNER: FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO., LTD.

Effective date: 20130118

Owner name: FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) C

Effective date: 20130118

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 201203 PUDONG NEW AREA, SHANGHAI TO: 100871 HAIDIAN, BEIJING

TA01 Transfer of patent application right

Effective date of registration: 20130118

Address after: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant after: Peking Founder Group Co., Ltd.

Applicant after: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

Address before: 201203, No. 608, midsummer Road, Zhangjiang hi tech park, Shanghai, Pudong New Area

Applicant before: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

ASS Succession or assignment of patent right

Owner name: FOUNDER INFORMATION INDUSTRY HOLDING CO., LTD. FOU

Free format text: FORMER OWNER: FOUNDER DIGITAL PUBLISHING TECHNOLOGY (SHANGHAI) CO., LTD.

Effective date: 20130912

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20130912

Address after: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant after: Peking Founder Group Co., Ltd.

Applicant after: Founder Holdings Company Limited (Founder Holdings)

Applicant after: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

Address before: 100871 Beijing, Haidian District into the house road, founder of the building on the 5 floor, No. 298

Applicant before: Peking Founder Group Co., Ltd.

Applicant before: Founder Digital Publishing Technology (Shanghai) Co.,Ltd.

GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150422

Termination date: 20170727