CN104915248A - 计算机实现的商品提供/消费方法及系统 - Google Patents
计算机实现的商品提供/消费方法及系统 Download PDFInfo
- Publication number
- CN104915248A CN104915248A CN201510254213.1A CN201510254213A CN104915248A CN 104915248 A CN104915248 A CN 104915248A CN 201510254213 A CN201510254213 A CN 201510254213A CN 104915248 A CN104915248 A CN 104915248A
- Authority
- CN
- China
- Prior art keywords
- commodity
- data buffering
- serial number
- annular data
- node serial
- 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
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
为了解决现有技术中因需要对线程加/解锁、阻塞和唤醒而造成的高成本问题,提供了计算机实现的商品提供和/或消费方法及系统。在计算机实现的商品提供方法中,启动生产者线程,获取环形数据缓冲中当前能够存放商品的节点编号,并将商品存放在环形数据缓冲中与所获取的节点编号相对应的位置处。通过该方法,解决了现有技术中因需要对线程加/解锁、阻塞和唤醒而造成的高成本问题。
Description
技术领域
本发明涉及通信网络上的商品提供/消费,并具体地涉及计算机实现的商品提供/消费方法的方法及设备。
背景技术
在网络商品的提供/消费中通常使用到Java应用。在Java应用开发中,多线程间交互是比较常见的,且大多数交互使用生产者/消费者模式。Java中的生产者/消费者模型一般有三种方式:wait()/notify、await()/signal、阻塞队列。上述三种实现方式的原理一致,都需要针对独占空间来加/解锁,阻塞和唤醒线程。然而,在JAVA语言开发工具包(JDK)中加锁的成本是很高的,因为每次加锁可能都需要扫描全局代码路径。
例如,图1示出了现有技术中用于商品提供/消费的方法的示例性线程。该方法是对上述三种方式通用的方法。如图1所示,该方法包括以下步骤:
1、创建生产者线程(步骤S21)
2、判断缓冲区是否有商品(步骤S22)
3、如果缓冲区为空,则创建一个商品(步骤S23),如果缓冲区有商品,则线程进入阻塞状态(步骤S25),此步骤需要进行加/解锁
4、在创建商品后,将商品放入缓冲区(步骤S24),并同时唤醒消费者线程,此步骤需要加/解锁
5、创建消费者线程(步骤S31)
6、判断缓冲区是否有商品(步骤S32)
7、如果有商品,则消费掉该商品(步骤S33),并同时唤醒生产者线程
8、如果没有,则消费者线程阻塞(步骤S34)
可见上述方法中多次使用到了加/解锁、阻塞和唤醒,导致其实现的成本增高。
发明内容
因此,需要一种能够减轻或解决上述问题的商品提供/消费方法及其相关系统。
根据本发明的一个方案,提供了一种计算机实现的商品提供方法,包括:启动生产者线程;由所述生产者线程获取环形数据缓冲中当前能够存放商品的节点编号;以及将商品存放在所述环形数据缓冲中与所获取的节点编号相对应的位置处。
根据本发明的一个方案,提供了一种计算机实现的商品消费方法,其中,商品被存放在环形数据缓冲,所述方法包括:启动消费者流程;由所述消费者线程获取环形数据缓冲中存放所述商品的节点编号;以及所述消费者线程在所述环形数据缓冲中与所述节点编号对应的位置处消费所述商品。
根据本发明的一个方案,提供了一种商品提供系统,包括:线程启动模块,用于启动生产者线程;环形数据缓冲;以及控制模块,用于控制所述生产者线程获取所述环形数据缓冲中当前能够存放商品的节点编号,且将商品存放在所述环形数据缓冲中与所获取的节点编号相对应的位置处。
根据本发明的一个方案,提供了一种商品消费系统,包括:环形数据缓冲,用于存放商品;线程启动模块,用于启动消费者流程;以及控制模块,用于控制所述消费者线程获取所述环形数据缓冲中存放所述商品的节点编号,且控制所述消费者线程在所述环形数据缓冲中与所述节点编号对应的位置处消费所述商品。
利用本发明的上述方法和系统,由于不需要对线程进行加/解锁,阻塞和唤醒,可以有效地降低成本。
附图说明
通过下面结合附图对发明进行的详细描述,将使本发明的上述特征和优点更加明显,其中:
图1是示出现有技术的商品提供/消费方法的流程图;
图2是示出根据本发明的实施例的商品提供方法的示意流程图;
图3是示出根据本发明的实施例的商品消费方法的示意流程图;
图4是示出根据本发明的实施例的商品提供系统的示意性框图;
图5是示出根据本发明的实施例的商品消费系统的示意性框图;以及
图6是示出根据本发明的另一实施例的商品提供/消费方法的流程图。
具体实施方式
下面,参考附图详细说明本发明的优选实施方式。在附图中,虽然示于不同的附图中,但相同的附图标记用于表示相同的或相似的组件。为了清楚和简明,对已知功能和结构的详细描述将被省略,以避免使本发明的主题不清楚。
图2示出了根据本发明的实施例的商品提供方法的示意流程图。如图2所示,该方法可包括:步骤210,启动生产者线程;步骤220,由生产者线程获取环形数据缓冲中当前能够存放商品的节点编号;以及步骤220,将商品存放在环形数据缓冲中与所获取的节点编号相对应的位置处。
可选地,该方法还可以包括创建生产者线程的步骤。
而在获取节点编号不成功的情况下,在一些示例中,生产者线程可暂停第一时间段,以防止过度消耗计算资源(例如,CPU资源),并在第一时间段之后重新获取节点编号。在本发明的一些示例中,第一时间段可以取100ms。然而本发明不限于此,根据实际情况(例如,系统中计算资源的多少),第一时间段也可以是100ms之外的其他值。例如,在计算资源充足的情况下,第一时间段可以取较小的值,反之亦然。
在需要存放多个商品的情况下,可针对要提供的下一商品执行上述获取步骤和上述存放步骤,直至所有商品存放完成。
在本发明的一些实施例中,环形数据缓冲的大小是2的N次方。当然,根据实际情况,在其他一些实施例中,环形数据缓冲也可以取其他大小,甚至可以不是环形结构。例如,在一些示例中,数据缓冲也可以是链表、堆栈等结构。
在一些实施例中,可在环形数据缓冲中使用比较并设置(CAS)机制保持节点编号的准确性。
在一些实施例中,环形数据缓冲中的节点编号是能够循环使用的,例如,通过以下算法来循环使用:
index=sequence&(length-1) (1)
其中,&是二进制“与”运算符,index表示要使用的节点编号,sequence表示当前节点编号,length表示环形数据缓冲的大小。
图3示出了根据本发明的实施例的商品消费方法的示意流程图。在图3所示的实施例中,商品已被存放在环形数据缓冲(或上述其他类型的数据缓冲)中。如图3所示,该方法可包括:步骤310,启动消费者流程;步骤320,由消费者线程获取环形数据缓冲中存放商品的节点编号;以及步骤330,消费者线程在环形数据缓冲中与节点编号对应的位置处消费商品。
可选地,该方法还可包括创建消费者流程。
在商品已被消费的情况下,可选地,还可释放该商品在环形数据缓冲中占用的空间。
在一些实施例中,如果节点编号获取不成功,消费者线程暂停第二时间段,并在第二时间段之后重新获取节点编号。在本发明的一些示例中,第二时间段可以取100ms。然而本发明不限于此,根据实际情况(例如,系统中计算资源的多少),第二时间段也可以是100ms之外的其他值。例如,在计算资源充足的情况下,第二时间段可以取较小的值,反之亦然。
图4示出了根据本发明的实施例的商品提供系统的示意性框图。如图4所示,该系统包括线程启动模块410,用于启动生产者线程;环形数据缓冲420;以及控制模块430,用于控制生产者线程获取环形数据缓冲420中当前能够存放商品的节点编号,且将商品存放在环形数据缓冲420中与所获取的节点编号相对应的位置处。
可选地,该系统还可包括用于创建生产者线程的线程创建模块440。
在一些实施例中,控制模块430还用于:如果获取不成功,控制生产者线程暂停第一时间段,并在第一时间段之后重新获取节点编号。
在一些实施例中,控制模块430还用于:针对要提供的下一商品执行获取操作和存放操作,直至所有商品存放完成。
图4中所示的环形数据缓冲器420可以是在图2所示的方法中使用的(环形)缓冲器。因此在此不再赘述。
图5示出了根据本发明的实施例的商品消费系统的示意性框图。如图5所示,该系统包括:环形数据缓冲510,用于存放商品;线程启动模块520,用于启动消费者流程;以及控制模块530,用于控制消费者线程获取环形数据缓冲510中存放商品的节点编号,且控制消费者线程在环形数据缓冲510中与节点编号对应的位置处消费商品。
可选地,该系统还可包括用于创建消费者线程的线程创建模块540。
在商品已被消费的情况下,可选地,还控制模块530还用于释放商品在环形数据缓冲510中占用的空间。
在一些实施例中,控制模块530还用于:如果获取不成功,控制消费者线程暂停第二时间段,并在第二时间段之后重新获取节点编号。在本发明的一些示例中,第二时间段可以取100ms。然而如上所述,第二时间段也可以根据实际情况采用其他值。
需要注意的是,上述图4和图5仅是为了示出本发明而做出的简要视图。为了清楚地示出本发明,在图4和图5中省略了本领域技术人员已知的装置/组件。例如,在图4和图5的示意图中还可包括一个或多个存储器,用于存储图4和图5中各组件在执行相应操作时需要/输出的数据。例如,在图4和图5的示意图中还可包括一个或多个输入/输出设备,如鼠标、USB设备、触摸屏等等,本发明不对此进行限制。
还需要注意的是,虽然以上将商品提供系统和商品消费系统作为两个独立的系统进行论述,然而在一些情况下,该两个系统也可被合并在同一系统中。在此情况下,图4中的线程启动模块410、环形数据缓冲420、控制模块430和线程创建模块440与图5中的线程启动模块520、环形数据缓冲510、控制模块530和线程创建模块540分别可以是相同的组件/部件,也可以是不同的组件/部件。在一些实施例中,可以使用相同或不同的处理器/控制器来实现上述模块。
下面参考图6,以将商品提供系统和商品消费系统合并在同一系统(即,商品提供系/消费系统)中为示例来阐述本发明的另一实施例。在下面的描述中,为了清楚和简明将会使用术语“线程启动模块”、“环形数据缓冲”、“控制模块”和“线程创建模块”来描述本实施例中涉及的组件/部件,而不区分其是图4中还是图5中示出的模块。
图6示出根据本发明的另一实施例的商品提供/消费方法的流程图。在图6所示的流程中,系统首先可进行数据初始化,线程创建模块创建生产者线程(步骤S11)和消费者线程(步骤S12)。需要注意的是,在仅进行商品提供或商品消费的情况下,可仅执行步骤S11和步骤S12中的一个步骤。
系统(例如,控制模块或其他未示出的组件)还可以创建环形数据缓冲(步骤S13),环形数据缓冲的大小是可配置的,在一些示例中是2的N次方。当然,根据所使用的具体缓冲器的不同,缓冲的大小也可以取其他的值。
在图6中,步骤S13被示意为在步骤S11、S12的同时/之后执行。然而在其他一些实施例中,步骤S13也可以在步骤S11、S12之前执行。即,可以在创建生产者线程和消费者线程之前就已经创建了环形数据缓冲。例如,在一些情况下,环形数据缓冲已被针对之前的线程所创建,并被维持以用于之后的线程。
在步骤S14中,线程启动模块可调用线程启动方法来启动线程(步骤S14)。
在生产者和/或消费者线程启动后,进入商品提供/消费子流程。
在该商品提供/消费子流程中的商品提供部分中,控制模块控制生产者线程从环形数据缓冲中获取当前可存放商品的节点编号(步骤S22),环形数据缓冲可使用CAS方式保持编号的正确性。
如果获取成功(步骤S23),则控制模块将商品放入环形数据缓冲中对应于所获取的节点编号的位置处(步骤S24)。缓冲中节点的编号(index)可以是循环可用的。例如,可使用上述等式(1)所示的算法来计算缓冲中要使用的节点的编号:index=sequence&(length-1)。
如果获取失败,控制模块控制生产者线程休息第一时间段(步骤S25),避免CPU资源消耗过高。此休息策略可以根据业务场景来进行多种配置。例如,在一些实施例中,第一时间段可以是100ms。而在另一些实施例中,取决于系统计算资源的多少,第一时间段可以大于或小于100ms。
然后,再重新获取下一个节点(步骤S22),如此循环,直至获得存放商品的节点或定时器超时。在此,所采用的获取次序可以是顺序。然而在其他一些实施例中,也可以采用逆序或预定的其他次序。
在图6所示的商品提供/消费子流程中的商品消费部分中,由消费者线程获取环形数据缓冲中已存放商品对应的节点的节点编号(步骤S32)。
如果成功(步骤S33),则消费者线程消费与所获得的节点编号对应的商品,并释放环形数据缓冲空间
如果失败,则休息第二时间段(例如,100ms)(步骤S35),以防止过度消耗CPU资源。如上所述,此步休息策略可以根据不同业务场景进行多种配置。例如,如上所述,第二时间段可以是不同于100ms的其他值。
根据具体的情况,上述的商品提供过程和商品消费过程可同步执行,也可异步执行。
综上所述,用户使用本发明的方法时,无需使用加/解锁,即可完成生产者与消费者的交互,在高并发时大大提高了性能。
上面的描述仅用于实现本发明的实施方式,本领域的技术人员应该理解,在不脱离本发明的范围的任何修改或局部替换,均应该属于本发明的权利要求来限定的范围,因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (18)
1.一种计算机实现的商品提供方法,包括:
启动生产者线程;
由所述生产者线程获取环形数据缓冲中当前能够存放商品的节点编号;以及
将商品存放在所述环形数据缓冲中与所获取的节点编号相对应的位置处。
2.根据权利要求1所述的方法,还包括:
如果所述获取不成功,所述生产者线程暂停第一时间段,并在所述第一时间段之后重新获取所述节点编号。
3.根据权利要求1所述的方法,还包括:
针对要提供的下一商品执行所述获取步骤和所述存放步骤,直至所有商品存放完成。
4.根据权利要求1至3中任一项所述的方法,其中,所述环形数据缓冲的大小是2的N次方。
5.根据权利要求1至3中任一项所述的方法,其中,在所述环形数据缓冲中使用比较并设置“CAS”机制保持所述节点编号的准确性。
6.根据权利要求1至3中任一项所述的方法,其中,基于以下算法,所述环形数据缓冲中的节点编号是能够循环使用的:
index=sequence&(length-1)
其中,&是二进制与运算符,index表示要使用的节点编号,sequence表示当前节点编号,length表示所述环形数据缓冲的大小。
7.一种计算机实现的商品消费方法,其中,商品被存放在环形数据缓冲,所述方法包括:
启动消费者流程;
由所述消费者线程获取环形数据缓冲中存放所述商品的节点编号;以及
所述消费者线程在所述环形数据缓冲中与所述节点编号对应的位置处消费所述商品。
8.根据权利要求7所述的方法,还包括:
释放所述商品在所述环形数据缓冲中占用的空间。
9.根据权利要求7所述的方法,还包括:
如果所述获取不成功,所述消费者线程暂停第二时间段,并在所述第二时间段之后重新获取所述节点编号。
10.一种商品提供系统,包括:
线程启动模块,用于启动生产者线程;
环形数据缓冲;以及
控制模块,用于控制所述生产者线程获取所述环形数据缓冲中当前能够存放商品的节点编号,且将商品存放在所述环形数据缓冲中与所获取的节点编号相对应的位置处。
11.根据权利要求10所述的商品提供系统,其中,所述控制模块还用于:
如果所述获取不成功,控制所述生产者线程暂停第一时间段,并在所述第一时间段之后重新获取所述节点编号。
12.根据权利要求10所述的商品提供系统,其中,所述控制模块还用于:
针对要提供的下一商品执行所述获取操作和所述存放操作,直至所有商品存放完成。
13.根据权利要求10至12中任一项所述的商品提供系统,其中,所述环形数据缓冲的大小是2的N次方。
14.根据权利要求10至12中任一项所述的商品提供系统,其中,在所述环形数据缓冲中使用比较并设置“CAS”机制保持所述节点编号的准确性。
15.根据权利要求10至12中任一项所述的商品提供系统,其中,基于以下算法,所述环形数据缓冲中的节点编号是能够循环使用的:
index=sequence&(length-1)
其中,&是二进制与运算符,index表示要使用的节点编号,sequence表示当前节点编号,length表示所述环形数据缓冲的大小。
16.一种商品消费系统,包括:
环形数据缓冲,用于存放商品;
线程启动模块,用于启动消费者流程;以及
控制模块,用于控制所述消费者线程获取所述环形数据缓冲中存放所述商品的节点编号,且控制所述消费者线程在所述环形数据缓冲中与所述节点编号对应的位置处消费所述商品。
17.根据权利要求16所述的商品消费系统,所述控制模块还用于:
释放所述商品在所述环形数据缓冲中占用的空间。
18.根据权利要求16所述的商品消费系统,所述控制模块还用于:
如果所述获取不成功,控制所述消费者线程暂停第二时间段,并在所述第二时间段之后重新获取所述节点编号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510254213.1A CN104915248A (zh) | 2015-05-18 | 2015-05-18 | 计算机实现的商品提供/消费方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510254213.1A CN104915248A (zh) | 2015-05-18 | 2015-05-18 | 计算机实现的商品提供/消费方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104915248A true CN104915248A (zh) | 2015-09-16 |
Family
ID=54084329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510254213.1A Pending CN104915248A (zh) | 2015-05-18 | 2015-05-18 | 计算机实现的商品提供/消费方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104915248A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107231283A (zh) * | 2016-03-23 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 消息管理方法及装置、消息预读方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7243354B1 (en) * | 2002-04-08 | 2007-07-10 | 3Com Corporation | System and method for efficiently processing information in a multithread environment |
CN101183304A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 并发非阻塞无锁队列及其实施方法和装置 |
CN103514131A (zh) * | 2012-06-29 | 2014-01-15 | 联想(北京)有限公司 | 系统信息输出方法和电子设备 |
CN104077113A (zh) * | 2014-07-10 | 2014-10-01 | 中船重工(武汉)凌久电子有限责任公司 | 一种无锁并发消息处理机制的实现方法 |
-
2015
- 2015-05-18 CN CN201510254213.1A patent/CN104915248A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7243354B1 (en) * | 2002-04-08 | 2007-07-10 | 3Com Corporation | System and method for efficiently processing information in a multithread environment |
CN101183304A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 并发非阻塞无锁队列及其实施方法和装置 |
CN103514131A (zh) * | 2012-06-29 | 2014-01-15 | 联想(北京)有限公司 | 系统信息输出方法和电子设备 |
CN104077113A (zh) * | 2014-07-10 | 2014-10-01 | 中船重工(武汉)凌久电子有限责任公司 | 一种无锁并发消息处理机制的实现方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107231283A (zh) * | 2016-03-23 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 消息管理方法及装置、消息预读方法及装置 |
CN107231283B (zh) * | 2016-03-23 | 2020-12-18 | 阿里巴巴集团控股有限公司 | 消息管理方法及装置、消息预读方法及装置 |
US11165740B2 (en) | 2016-03-23 | 2021-11-02 | Alibaba Group Holding Limited | Message sending method and terminal device |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110502340A (zh) | 一种资源动态调整方法、装置、设备及存储介质 | |
CN109947557B (zh) | 用于云平台的分布式生命周期管理 | |
EP2580657B1 (en) | Information processing device and method | |
CN107291558B (zh) | 一种应用程序接口死锁监控方法和装置 | |
CN105700939A (zh) | 一种分布式系统中多线程同步的方法和系统 | |
CN102508717B (zh) | 一种应用于多核处理器的内存调度方法及装置 | |
CN105138310A (zh) | 一种并发访问控制方法和系统 | |
CN102314368A (zh) | 更新服务器程序的配置数据的方法及设备 | |
CN101477386B (zh) | 一种定时器实现方法和装置 | |
EP3074826A1 (en) | Offloading human-machine-interaction tasks | |
CN105677468A (zh) | 缓存及其设计方法以及利用该缓存的调度方法和调度装置 | |
CN104486373A (zh) | 一种锁资源迁移方法、节点及分布式系统 | |
CN104915248A (zh) | 计算机实现的商品提供/消费方法及系统 | |
CN103019849B (zh) | 云计算环境下的虚拟机管理方法 | |
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN107450991A (zh) | 一种高效分布式全局锁协调方法 | |
CN106874129B (zh) | 一种操作系统进程调度顺序确定方法及控制方法 | |
CN103703449A (zh) | 存储器合并的计算机实现方法、系统以及装置 | |
CN107122251B (zh) | 一种业务子卡管理方法及装置 | |
US20240086234A1 (en) | Method and device for scheduling tasks in multi-core processor | |
CN103955379A (zh) | 一种注册软件的方法和系统 | |
US20190188044A1 (en) | Method and device for allocating resources in a system | |
US11518035B2 (en) | Method and apparatus for controlling robot, method and apparatus for providing service, and electronic device | |
Burmester et al. | Making mechatronic agents resource-aware in order to enable safe dynamic resource allocation | |
CN114003238A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150916 |
|
RJ01 | Rejection of invention patent application after publication |