一種以觀察者模式發(fā)送大量郵件的方法
【專利摘要】本發(fā)明提供一種以觀察者模式發(fā)送大量郵件的方法,其實(shí)現(xiàn)過程為:構(gòu)建郵件發(fā)送組件:該組件包括線程同步的隊(duì)列對象、線程通信模塊、線程發(fā)送模塊、數(shù)據(jù)收集模塊;郵件發(fā)送請求到達(dá)時(shí),把郵件信息及時(shí)的存儲到內(nèi)存中,然后反饋成功信號給郵件發(fā)送者,完成請求的提交;郵件信息在內(nèi)存中有序排列,并由線程發(fā)送模塊依序發(fā)送;當(dāng)物理內(nèi)存中的有序的郵件全部發(fā)送完畢后,發(fā)現(xiàn)郵件隊(duì)列對象內(nèi)無郵件對象時(shí),通知線程通信模塊,工作線程進(jìn)入休眠狀態(tài);當(dāng)有數(shù)據(jù)被提交時(shí),線程被線程通信模塊喚醒,進(jìn)入工作狀態(tài)。該一種以觀察者模式發(fā)送大量郵件的方法和現(xiàn)有技術(shù)相比,達(dá)到大量郵件即時(shí)存儲、有序發(fā)送、程序工作線程智能休眠的效果,實(shí)用性強(qiáng)。
【專利說明】一種以觀察者模式發(fā)送大量郵件的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計(jì)算【技術(shù)領(lǐng)域】,具體的說是一種降低資源占用率、按序發(fā)送、以觀察者模式發(fā)送大量郵件的方法。
【背景技術(shù)】
[0002]云計(jì)算是計(jì)算機(jī)發(fā)展歷史的有一個(gè)里程碑的發(fā)展階段,在這一階段中,物理資源將大量以數(shù)據(jù)中心的形式出現(xiàn),由專業(yè)的數(shù)據(jù)中心企業(yè)從事物理資源的管理和規(guī)化。資源需求方,不再需要自己構(gòu)建大成本的數(shù)據(jù)中心,而是向?qū)I(yè)的數(shù)據(jù)中心租借計(jì)算資源。
[0003]物理資源的集中,帶來的是海量數(shù)據(jù)的應(yīng)用,也帶來了更為頻繁的交互。作為交互通用模式之一的的郵件通知和告警,首當(dāng)其沖。
[0004]在現(xiàn)有技術(shù)中,大量郵件發(fā)送過程都是單線程、隊(duì)列式同步發(fā)送,占用資源大,負(fù)載和耦合性高,發(fā)送效率不熬。采用觀察者模式發(fā)送郵件,可以使內(nèi)存、CPU等物理資源消耗降低。異步操作降低了用戶等待時(shí)間,提高用戶的體驗(yàn)。
[0005]為了提高發(fā)送效率,降低資源占用,現(xiàn)提供一種以觀察者模式發(fā)送大量郵件的方法。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的技術(shù)任務(wù)是解決現(xiàn)有技術(shù)的不足,提供一種降低資源占用率、以觀察者模式發(fā)送大量郵件的方法。
[0007]本發(fā)明的技術(shù)方案是按以下方式實(shí)現(xiàn)的,該一種以觀察者模式發(fā)送大量郵件的方法,其實(shí)現(xiàn)過程為:
一、構(gòu)建郵件發(fā)送組件:
該組件包括線程同步的隊(duì)列對象、線程通信模塊、線程發(fā)送模塊、數(shù)據(jù)收集模塊,其
中:
隊(duì)列對象用于存儲郵件信息。
[0008]線程通信模塊作為觀察者角色,監(jiān)控add郵件的動(dòng)作,喚醒發(fā)送線程。
[0009]線程發(fā)送模塊負(fù)責(zé)調(diào)用郵件發(fā)送組件的通信程序,進(jìn)行發(fā)送。
[0010]數(shù)據(jù)收集模塊用于add郵件數(shù)據(jù)到郵件隊(duì)列對象中。
[0011]二、完成郵件發(fā)送:
I)郵件發(fā)送請求到達(dá)時(shí),把郵件信息及時(shí)的存儲到內(nèi)存中,即隊(duì)列對象中,然后反饋成功信號給郵件發(fā)送者,完成請求的提交。
[0012]2)郵件信息在內(nèi)存中有序排列,并由線程發(fā)送模塊依序發(fā)送。
[0013]3)當(dāng)物理內(nèi)存中的有序的郵件全部發(fā)送完畢后,發(fā)現(xiàn)郵件隊(duì)列對象內(nèi)無郵件對象時(shí),通知線程通信模塊,工作線程進(jìn)入休眠狀態(tài)。
[0014]4)當(dāng)有數(shù)據(jù)被提交時(shí),線程被線程通信模塊喚醒,進(jìn)入工作狀態(tài)。
[0015]所述步驟I)中郵件存儲過程為:線程收集模塊把頁面的所有的郵件數(shù)據(jù)收集,傳輸給后臺;后臺通過線程間相互通信的方式,實(shí)現(xiàn)數(shù)據(jù)收集和數(shù)據(jù)發(fā)送過程中同步和智能喚醒。
[0016]進(jìn)一步的,該郵件存儲的詳細(xì)過程如下所述:先將各個(gè)線程中的郵件信息add到同一個(gè)Queue對象中,Queue是線程同步的。
[0017]然后由同步塊控制,同時(shí),發(fā)送郵件的類對象控制通信鎖,形成發(fā)送線程和各請求線程間的通信。
[0018]所述步驟2)中郵件發(fā)送過程為:后臺接收到的數(shù)據(jù)由一個(gè)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)對象承載,由于隊(duì)列先進(jìn)先出的特性,郵件被排列成一隊(duì),等待線程發(fā)送模塊的發(fā)送。
[0019]所述步驟3)、步驟4)的操作過程為:當(dāng)每條郵件添加后,都由線程通信模塊執(zhí)行喚醒線程的操作:后臺線程如果在工作,則繼續(xù)工作,如果在等待,則進(jìn)入工作狀態(tài)。
[0020]后臺線程被發(fā)現(xiàn)沒有郵件隊(duì)列時(shí),再次進(jìn)入等待狀態(tài)。
[0021]進(jìn)一步的,所述步驟3)、步驟4)的詳細(xì)過程為:
當(dāng)請求線程add完成后,調(diào)用notify O方法,喚醒所有發(fā)送線程中的某一個(gè),被喚醒的發(fā)送線程在得知有新的郵件需要發(fā)送后,進(jìn)入工作狀態(tài),當(dāng)郵件全部被發(fā)送完畢后,喚醒的線程又重新進(jìn)入休眠狀態(tài)。
[0022]大量郵件需要發(fā)送時(shí),多個(gè)沉睡的線程被依次喚醒,進(jìn)入工作狀態(tài)完成上述步驟中的發(fā)送過程。
[0023]前臺的數(shù)據(jù)收集模塊由郵件發(fā)送請求的線程與隊(duì)列對象構(gòu)成;后臺的發(fā)送模塊由一個(gè)或者多個(gè)發(fā)送線程構(gòu)成;線程通信模塊由發(fā)送類的類對象擔(dān)當(dāng)觀察者的角色,當(dāng)發(fā)現(xiàn)有郵件需要發(fā)送時(shí),喚醒工作線程,否則不喚醒。
[0024]本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是:
本發(fā)明的一種以觀察者模式發(fā)送大量郵件的方法通過郵件發(fā)送組件以觀察者模式發(fā)送大量郵件策略,實(shí)現(xiàn)大量郵件的發(fā)送,同時(shí)采用觀察者模式的程序設(shè)計(jì),能達(dá)到大量郵件即時(shí)存儲、有序發(fā)送、程序工作線程智能休眠的效果,降低郵件發(fā)送的負(fù)載度和耦合度,提高發(fā)送效率,同時(shí)節(jié)省內(nèi)存、CPU等物理資源的消耗,節(jié)能減排,實(shí)用性強(qiáng),易于推廣。
【專利附圖】
【附圖說明】
[0025]附圖1為本發(fā)明的實(shí)現(xiàn)示意圖。
【具體實(shí)施方式】
[0026]下面結(jié)合附圖對本發(fā)明的一種以觀察者模式發(fā)送大量郵件的方法作以下詳細(xì)說明。
[0027]本發(fā)明為實(shí)現(xiàn)大量郵件的即時(shí)存儲和有序發(fā)送,如附圖1所示,現(xiàn)提供一種以觀察者模式發(fā)送大量郵件的方法,本方法是以后臺智能休眠的工作線程為基礎(chǔ),以內(nèi)存隊(duì)列對郵件信息進(jìn)行存儲為前提,通過線程通信的方式,靈活高效的發(fā)送大量的郵件信息。其具體實(shí)現(xiàn)過程為:
一、構(gòu)建郵件發(fā)送組件:
該組件包括線程同步的隊(duì)列對象、線程通信模塊、線程發(fā)送模塊、數(shù)據(jù)收集模塊,其
中: 線程同步的隊(duì)列對象即郵件隊(duì)列對象,用于存儲郵件信息。
[0028]線程通信模塊作為觀察者角色,監(jiān)控add郵件的動(dòng)作,喚醒發(fā)送線程,在此用模塊A表示。
[0029]線程發(fā)送模塊可以是多個(gè)線程,負(fù)責(zé)調(diào)用郵件發(fā)送組件的通信程序,進(jìn)行發(fā)送,在此用模塊B表示。
[0030]數(shù)據(jù)收集模塊可以是多個(gè)線程,用于add郵件數(shù)據(jù)到郵件隊(duì)列對象中,在此用模塊C表示。
[0031]二、完成郵件發(fā)送:該發(fā)送過程為模塊B發(fā)送add郵件數(shù)據(jù),通過模塊A喚醒模塊C。模塊C開始工作,發(fā)現(xiàn)郵件隊(duì)列對象內(nèi)無郵件對象時(shí),通知模塊A,并進(jìn)入wait狀態(tài)。
[0032]更為詳細(xì)的,該郵件發(fā)送過程如下所述:
I)郵件發(fā)送請求到達(dá)時(shí),把郵件信息及時(shí)的存儲到內(nèi)存中,即隊(duì)列對象中,然后反饋成功信號給郵件發(fā)送者,完成請求的提交。
[0033]線程收集模塊把頁面的所有的郵件數(shù)據(jù)收集,傳輸給后臺;后臺通過線程間相互通信的方式,實(shí)現(xiàn)數(shù)據(jù)收集和數(shù)據(jù)發(fā)送過程中同步和智能喚醒。
[0034]2)郵件信息在內(nèi)存中有序排列,并由線程發(fā)送模塊依序發(fā)送。
[0035]后臺接收到的數(shù)據(jù)由一個(gè)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)對象承載,由于隊(duì)列先進(jìn)先出的特性,郵件被排列成一隊(duì),等待線程發(fā)送模塊的發(fā)送。
[0036]3)當(dāng)物理內(nèi)存中的有序的郵件全部發(fā)送完畢后,發(fā)現(xiàn)郵件隊(duì)列對象內(nèi)無郵件對象時(shí),通知線程通信模塊,工作線程進(jìn)入休眠狀態(tài)。
[0037]4)當(dāng)有數(shù)據(jù)被提交時(shí),線程被線程通信模塊喚醒,進(jìn)入工作狀態(tài)。
[0038]當(dāng)每條郵件添加后,都由線程通信模塊執(zhí)行喚醒線程的操作:后臺線程如果在工作,則繼續(xù)工作,如果在等待,則進(jìn)入工作狀態(tài);后臺線程被發(fā)現(xiàn)沒有郵件隊(duì)列時(shí),再次進(jìn)入等待狀態(tài)。
[0039]前臺的數(shù)據(jù)收集模塊由郵件發(fā)送請求的線程與隊(duì)列對象構(gòu)成;后臺的發(fā)送模塊由一個(gè)或者多個(gè)發(fā)送線程構(gòu)成;線程通信模塊由發(fā)送類的類對象擔(dān)當(dāng)觀察者的角色,當(dāng)發(fā)現(xiàn)有郵件需要發(fā)送時(shí),喚醒工作線程,否則不喚醒。
[0040]實(shí)施例:
先將各個(gè)線程中的郵件信息(簡稱sms) add到同一個(gè)Queue對象中,Queue是線程同步的,保證在多個(gè)線程同時(shí)add時(shí)候,不會出現(xiàn)數(shù)據(jù)錯(cuò)誤。
[0041]然后由同步塊synchronized控制,同時(shí),發(fā)送郵件的類對象控制通信鎖,形成發(fā)送線程和各請求線程間的通信。
[0042]當(dāng)請求線程add完成后,調(diào)用notify O方法,喚醒所有發(fā)送線程中的某一個(gè),被喚醒的發(fā)送線程在得知有“新”的郵件需要發(fā)送后,進(jìn)入工作狀態(tài),當(dāng)郵件全部被發(fā)送完畢后,喚醒的線程又重新進(jìn)入休眠狀態(tài)。
[0043]大量郵件需要發(fā)送時(shí),多個(gè)沉睡的線程會被依次喚醒,進(jìn)入工作狀態(tài)。
[0044]以上所述僅為本發(fā)明的實(shí)施例而已,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種以觀察者模式發(fā)送大量郵件的方法,其特征在于其實(shí)現(xiàn)過程為: 一、構(gòu)建郵件發(fā)送組件: 該組件包括線程同步的隊(duì)列對象、線程通信模塊、線程發(fā)送模塊、數(shù)據(jù)收集模塊,其中: 隊(duì)列對象用于存儲郵件信息; 線程通信模塊作為觀察者角色,監(jiān)控add郵件的動(dòng)作,喚醒發(fā)送線程; 線程發(fā)送模塊負(fù)責(zé)調(diào)用郵件發(fā)送組件的通信程序,進(jìn)行發(fā)送; 數(shù)據(jù)收集模塊用于add郵件數(shù)據(jù)到郵件隊(duì)列對象中; 二、完成郵件發(fā)送: 1)郵件發(fā)送請求到達(dá)時(shí),把郵件信息及時(shí)的存儲到內(nèi)存中,即隊(duì)列對象中,然后反饋成功信號給郵件發(fā)送者,完成請求的提交; 2)郵件信息在內(nèi)存中有序排列,并由線程發(fā)送模塊依序發(fā)送; 3)當(dāng)物理內(nèi)存中的有序的郵件全部發(fā)送完畢后,發(fā)現(xiàn)郵件隊(duì)列對象內(nèi)無郵件對象時(shí),通知線程通信模塊,工作線程進(jìn)入休眠狀態(tài); 4)當(dāng)有數(shù)據(jù)被提交時(shí),線程被線程通信模塊喚醒,進(jìn)入工作狀態(tài)。
2.根據(jù)權(quán)利要求1所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:所述步驟I)中郵件存儲過程為:線程收集模塊把頁面的所有的郵件數(shù)據(jù)收集,傳輸給后臺;后臺通過線程間相互通信的方式,實(shí)現(xiàn)數(shù)據(jù)收集和數(shù)據(jù)發(fā)送過程中同步和智能喚醒。
3.根據(jù)權(quán)利要求2所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:所述步驟I)中郵件存儲的詳細(xì)過程為:先將各個(gè)線程中的郵件信息add到同一個(gè)Queue對象中,Queue是線程同步的;然后由同步塊控制,同時(shí),發(fā)送郵件的類對象控制通信鎖,形成發(fā)送線程和各請求線程間的通信。
4.根據(jù)權(quán)利要求1所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:所述步驟2)中郵件發(fā)送過程為:后臺接收到的數(shù)據(jù)由一個(gè)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)對象承載,由于隊(duì)列先進(jìn)先出的特性,郵件被排列成一隊(duì),等待線程發(fā)送模塊的發(fā)送。
5.根據(jù)權(quán)利要求1所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:所述步驟3)、步驟4)的操作過程為:當(dāng)每條郵件添加后,都由線程通信模塊執(zhí)行喚醒線程的操作:后臺線程如果在工作,則繼續(xù)工作,如果在等待,則進(jìn)入工作狀態(tài);后臺線程被發(fā)現(xiàn)沒有郵件隊(duì)列時(shí),再次進(jìn)入等待狀態(tài)。
6.根據(jù)權(quán)利要求5所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:所述步驟3)、步驟4)的詳細(xì)過程為:當(dāng)請求線程add完成后,調(diào)用notify O方法,喚醒所有發(fā)送線程中的某一個(gè),被喚醒的發(fā)送線程在得知有新的郵件需要發(fā)送后,進(jìn)入工作狀態(tài),當(dāng)郵件全部被發(fā)送完畢后,喚醒的線程又重新進(jìn)入休眠狀態(tài); 大量郵件需要發(fā)送時(shí),多個(gè)沉睡的線程被依次喚醒,進(jìn)入工作狀態(tài)完成上述步驟中的發(fā)送過程。
7.根據(jù)權(quán)利要求1?6中任一所述的一種以觀察者模式發(fā)送大量郵件的方法,其特征在于:前臺的數(shù)據(jù)收集模塊由郵件發(fā)送請求的線程與隊(duì)列對象構(gòu)成;后臺的發(fā)送模塊由一個(gè)或者多個(gè)發(fā)送線程構(gòu)成;線程通信模塊由發(fā)送類的類對象擔(dān)當(dāng)觀察者的角色,當(dāng)發(fā)現(xiàn)有郵件需要發(fā)送時(shí),喚醒工作線程,否則不喚醒。
【文檔編號】H04L29/08GK103973549SQ201410206265
【公開日】2014年8月6日 申請日期:2014年5月16日 優(yōu)先權(quán)日:2014年5月16日
【發(fā)明者】李新虎, 于輝, 劉俊朋, 郭鋒, 劉正偉 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司