亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向并發(fā)程序中鎖機制的智能化推薦方法

        2021-07-02 08:54:22董士程
        計算機應用 2021年6期
        關鍵詞:郵戳線程決策樹

        張 楊,董士程

        (河北科技大學信息科學與工程學院,石家莊 050018)

        (?通信作者電子郵箱zhangyang@hebust.edu.cn)

        0 引言

        同步控制是并發(fā)程序中用于保證程序狀態(tài)和數(shù)據(jù)正確的必備措施,目前學術界和工業(yè)界提出了多種同步控制方式,包括鎖、原子塊和軟件事務型內(nèi)存。鎖是目前使用較為廣泛且程序員熟悉度較高的一種同步控制方式;原子塊使用樂觀鎖策略以原子方式更新數(shù)據(jù),操作簡單,但是原子操作的程序編寫相對復雜;軟件事務型內(nèi)存使用事務機制實現(xiàn)并發(fā)操作,但在大量事務執(zhí)行時對硬件要求較高,在數(shù)據(jù)競爭頻繁的情況下開銷較大。在多核時代,雖然使用鎖會遇到鎖競爭問題,但是鎖仍然是目前作為同步控制的主要方式。

        Java 語言提供了同步鎖、可重入鎖、讀寫鎖、郵戳鎖等多種類型的鎖,其中同步鎖是一種互斥鎖,程序開發(fā)者多以同步方法或同步塊的形式使用同步鎖;可重入鎖是一種互斥鎖,它和同步鎖具有相同的基本行為和語義,但是在同步鎖的基礎上擴展了許多功能;讀寫鎖除了提供了可重入鎖的一些特性外,又把鎖分為讀鎖和寫鎖,讀寫鎖允許更大程度的并發(fā);從JDK1.8 版本開始引入的郵戳鎖還提供了鎖升級、降級、優(yōu)化讀等操作。每種機制都有優(yōu)缺點與各自的適用場景,這要求程序開發(fā)者必須熟練掌握它們的特點,并在并發(fā)軟件開發(fā)時作出正確的選擇。

        多種鎖機制并存的局面以及在使用不同鎖機制時程序性能的差異情況導致程序開發(fā)者在選擇鎖機制時常常感到困惑,以往的做法是程序員手動地把程序從一種同步機制改寫為另一種同步機制,但這要求程序員對每種同步機制都非常的熟悉,手動的改寫也容易給程序引入新的錯誤,破壞了程序的可維護性。一些研究使用自動重構工具幫助程序員在多種鎖機制之間進行轉(zhuǎn)換,比如針對重入鎖以及讀寫鎖提出了一種自動重構算法[1],或者面向可定制鎖[2]和郵戳鎖[3]的自動重構方法,以及在進行優(yōu)化同步瓶頸的研究中提出的一種鎖分解方式[4]。雖然上述方式可以幫助程序開發(fā)人員比較各種鎖的性能,但是有時不成熟的重構工具往往會給程序引入一些錯誤,特別是對于并發(fā)程序。從目前的研究來看,大部分工作局限于對于鎖的使用及其相互轉(zhuǎn)化,對于鎖影響程序性能的原因缺乏全面的認識,缺少對鎖機制的直接推薦使用方法,而且將機器學習算法應用于鎖機制的研究還較少。

        針對目前研究存在的問題,本文以并發(fā)程序中的鎖機制作為主要研究對象,研究其制約性能發(fā)揮的因素。為了解決上述鎖機制選擇困難的問題,本文提出了一種幫助并發(fā)程序開發(fā)人員選擇鎖機制的推薦方法LockRec,它基于已有的并發(fā)程序信息,使用改進的隨機森林算法構建鎖機制推薦模型,可以幫助開發(fā)人員在同步鎖、可重入鎖、讀寫鎖、郵戳鎖四種鎖之中進行選擇,使用UCI 的公開四種數(shù)據(jù)集對提出的模型進行驗證,推薦準確率平均值可達95.1%。此外,本文還對兩個真實程序給出了鎖機制的推薦結果以及使用推薦前后的鎖機制性能對比,結果顯示推薦后的程序性能平均加速比分別為1.35、1.29,證明LockRec 可以有效地幫助開發(fā)者選擇合適的鎖機制。

        1 相關工作

        為了提高并發(fā)編程的效率,學術界提出了很多輔助并發(fā)編程的技術和工具,國內(nèi)外許多大學和研究機構也對同步機制相關的問題進行了研究。Sch?fer等[5]對如何正確地重構并發(fā)程序進行了研究,并保證程序正確地進行同步控制,設計了一個軟件重構工具Relocker,該工具可以實現(xiàn)源對源的鎖重構。Rose 等[6]通過對相關程序進行檢測,收集在執(zhí)行時有關鎖關系的信息,從而對多態(tài)鎖類型進行動態(tài)推理,以便檢測出在多線程Java 程序中的數(shù)據(jù)競爭。此外,Baum 等[7]對面向軟件事務性內(nèi)存的重構技術進行了研究;Ernst等[8-9]提出了一種形式化語義的鎖規(guī)范,使用抽象解釋和類型理論兩種不同的分析方式來表達形式語義,可以正確推斷和檢查Java 鎖規(guī)則的工具。AutoLocker[10]是一個鎖的推測工具,可以實現(xiàn)對象訪問前加鎖和解鎖操作,但是沒有研究如何在不同的鎖之間進行推薦。雖然上述方式可以幫助程序開發(fā)人員比較各種鎖的性能,但是有時不成熟的重構工具往往會給程序引入一些錯誤,特別是對于并發(fā)程序。這種改寫的不足之處表現(xiàn)在:第一,對程序員的要求較高,即要求程序員對每種同步機制都非常地熟悉;第二,浪費了寶貴的時間,程序員需要處理那些與業(yè)務邏輯不相關的內(nèi)容,不能集中精力處理核心業(yè)務邏輯;第三,手動的改寫容易給程序引入新的錯誤,破壞了程序的可維護性;第四,不同鎖機制的性能受多種因素影響,難于抉擇。此外,有些程序員通過借助已有經(jīng)驗的方式來選擇鎖,但是這種選擇方式缺乏靈活性,一旦環(huán)境改變,選擇的鎖機制則不一定適用。因此,迫切需要對鎖機制的推薦方法進行研究,并提供相應的算法支持自動重構。

        近年來,利用大規(guī)模代碼資源中蘊涵的眾多知識進行智能化軟件開發(fā)具有非常重要的理論與應用價值。Alon等[11]提出了一種將代碼片段表示為連續(xù)分布式向量的神經(jīng)網(wǎng)絡模型,其主要思想是將代碼片段表示為一個固定長度的代碼向量,它可以用來預測代碼片段的語義屬性。傳統(tǒng)的基于信息檢索的方法往往將程序視為自然語言文本,這可能會錯過源代碼的重要語義信息,所以Zhang 等[12]提出了一種新的基于抽象語法樹的神經(jīng)網(wǎng)絡用于源代碼表示,基于語句向量的序列,采用雙向循環(huán)神經(jīng)網(wǎng)絡模型,利用語句的自然性,最終產(chǎn)生代碼片段的向量表示。Raychev 等[13]提出了一種新的方法來預測從大代碼庫中得到的程序?qū)傩?,其從“大代碼”中學習一個概率模型,并使用這個模型來預測新的、看不見的程序的屬性。Madeiral 等[14]提出了一個收集和存儲bug 到一個可擴展的bug 基準中的項目,從GitHub 上托管的開源項目中找到潛在的缺陷和修補程序版本對,用于Java中的自動修復研究。Saha 等[15]提供了一個jar,用于研究Java 程序自動調(diào)試、補丁和測試的大型數(shù)據(jù)集,其由1 158 個錯誤和補丁組成,這些錯誤和補丁來自8個大型流行的開源Java項目,涵蓋8個不同的著名應用程序類別。當前對于鎖機制使用的代碼推薦的相關研究尚有欠缺,目前大部分工作也是關注于使用相似代碼來給予推薦,對于鎖機制的使用無法在程序開發(fā)初期就能給出相應的推薦。

        2 不同鎖機制性能對比

        本章給出了同步鎖、可重入鎖、讀寫鎖、郵戳鎖的性能分析結果,這里使用ArrayList、HashMap、LinkedList、TreeSet四種線程不安全的數(shù)據(jù)結構,使用多個線程對其進行讀寫操作,利用不同的鎖機制對其讀寫操作進行保護,將其變?yōu)榫€程安全的操作。這里選擇使用的數(shù)據(jù)結構、執(zhí)行線程數(shù)、讀寫線程比例以及執(zhí)行次數(shù)等四種變量進行執(zhí)行時間的分析,其中每個線程將執(zhí)行500 次的讀操作或?qū)懖僮?,所有實驗?shù)據(jù)是在執(zhí)行5 次的基礎上取平均值后得到的。圖1 給出了四種數(shù)據(jù)結構使用四種鎖機制(其中郵戳鎖分為優(yōu)化讀鎖形式與未優(yōu)化的形式)的性能測試結果,在實驗中分別選擇10和100線程來執(zhí)行讀寫操作,同時選取線程總數(shù)10%的作為讀線程或?qū)懢€程的數(shù)量(R表示讀線程數(shù),W表示寫線程數(shù))。

        圖1 不同ArrayList線程的性能對比Fig.1 Performance comparison of different ArrayList threads

        如圖1(a)所示,ArrayList 使用四種鎖時,在總線程為10且讀寫線程比為1∶9 時,使用讀寫鎖的時間最小,同步鎖與可重入鎖時間一樣,兩種郵戳鎖的時間最多,其中優(yōu)化讀鎖的要小于未優(yōu)化讀鎖的時間;讀寫線程比為9∶1 時,執(zhí)行時間均有所減少,使用讀寫鎖的時間仍是最小的,使用兩種郵戳鎖的時間仍較多。如圖1(b)所示,在總線程為100 且讀寫線程比為1∶9 時,使用可重入鎖與讀寫鎖的時間最少,同步鎖時間最多,使用兩種郵戳鎖的時間多于可重入鎖,但少于同步鎖的,其中優(yōu)化讀鎖的要小于未優(yōu)化讀鎖的時間;讀寫線程比為9∶1 時,執(zhí)行時間均有所減少,不同鎖的執(zhí)行時間相近,使用可重入鎖與讀寫鎖的時間仍要少于其他鎖。

        HashMap 在總線程為10 且讀寫線程比為1∶9 時(如圖2(a)所示),不同鎖的執(zhí)行時間相近;讀寫線程比為9∶1時,使用同步鎖與可重入鎖的執(zhí)行時間均有所減少,其他鎖執(zhí)行時間沒有明顯變化,使用同步鎖的時間最少。在總線程為100且讀寫線程比為1∶9時(如圖2(b)所示),使用同步鎖時間最多,其他鎖的時間則相近,但使用兩種郵戳鎖的時間要多于可重入鎖跟讀寫鎖,其中優(yōu)化讀鎖的要大于未優(yōu)化讀鎖的時間;讀寫線程比為9∶1 時,使用同步鎖的時間仍是最多的,可重入鎖與郵戳鎖的執(zhí)行時間都有所減少,使用讀寫鎖的時間變化不大。

        圖2 不同HashMap線程的性能比較Fig.2 Performance comparison of different HashMap threads

        當考慮LinkedList數(shù)據(jù)結構在使用四種鎖時,當總線程為10 且讀寫線程比為1∶9 時(如圖3(a)所示),不同鎖的執(zhí)行時間比較接近;讀寫線程比為9∶1 時,執(zhí)行時間均有所增加,使用同步鎖與可重入鎖的時間是最大的,使用兩種郵戳鎖的時間是最小的,其中優(yōu)化讀鎖的要小于未優(yōu)化讀鎖的時間。在總線程為100 且讀寫線程比為1∶9 時(如圖3(b)所示),不同鎖的執(zhí)行時間相近,使用同步鎖的要小于其他鎖的時間;讀寫線程比為9∶1 時,執(zhí)行時間均有所增加,使用讀寫鎖的時間是最小的可重入鎖與兩種郵戳鎖的時間相近,都大于使用同步鎖的時間。

        圖3 不同LinkedList線程的性能比較Fig.3 Performance comparison of different LinkedList threads

        對于TreeSet,在總線程為10 且讀寫線程比為1∶9 時(如圖4(a)所示),使用郵戳鎖的時間最少,其中優(yōu)化讀鎖的時間要小于未優(yōu)化讀鎖的時間,讀寫鎖的時間最少,可重入鎖的時間較多;讀寫線程比為9∶1 時,執(zhí)行時間均有所減少,使用兩種郵戳的時間仍是最小的,其他鎖的時間相近。在總線程為100且讀寫線程比為1∶9時(如圖4(b)所示),使用讀寫鎖的時間最少,使用同步鎖與可重入鎖的時間最多,使用兩種郵戳鎖的時間多于讀寫鎖,但少于另外兩種鎖;讀寫線程比為9∶1時,執(zhí)行時間均有所減少,使用讀寫鎖的時間仍要少于其他鎖,使用同步鎖與可重入鎖的時間仍較多。

        圖4 不同TreeSet線程的性能比較Fig.4 Performance comparison of different TreeSet threads

        綜合上述分析可以得出以下結論:

        1)不同線程總數(shù)和不同讀寫線程的比例對使用鎖的應用程序的性能有較大影響;

        2)對于使用同一個數(shù)據(jù)結構的應用程序,使用不同鎖的程序性能往往不同;

        3)即使每次運行的線程數(shù)量相同,不同數(shù)據(jù)結構的鎖應用程序性能也不同;

        4)一個鎖機制并不是絕對優(yōu)于另一個鎖機制,手動的選擇比較困難。

        通過對性能結果的分析,發(fā)現(xiàn)對鎖結構進行決策是一項困難的任務,并且其影響因素有很多,單純依靠經(jīng)驗判斷很難抉擇,因此迫切需要提供一種方法實現(xiàn)不同鎖機制的推薦,幫助程序員了解程序使用哪一種鎖性能較好。

        3 面向不同鎖機制的推薦方法

        本章首先給出面向不同鎖機制的推薦框架,然后對推薦系統(tǒng)的各個實現(xiàn)部分進行詳細描述。

        3.1 推薦框架

        在推薦框架中,首先對使用程序靜態(tài)分析工具對鎖的并發(fā)程序信息進行收集,抽取如數(shù)據(jù)結構、線程數(shù)等程序相關的特征屬性值;其次將得到的樣本數(shù)據(jù)經(jīng)過抽樣[16]算法處理后,輸入到隨機森林模型中,進行模型訓練;最后分析驗證模型的適用性以及合理性,從而得到鎖機制推薦模型。當有一個待推薦的并發(fā)程序時,收集其相關特征屬性并輸入到鎖機制推薦模型中,輸出推薦使用的鎖機制。鎖機制的推薦框架如圖5所示。

        圖5 推薦框架Fig.5 Recommendation framework

        3.2 特征選擇與數(shù)據(jù)處理

        特征選擇是從原始特征中根據(jù)一定的評估準則剔除一些不相關特征而保留一些最有效特征的過程,且在特征選擇后分類正確率比選擇前更高或近似。在鎖機制推薦的模型中,本文首先使用CK(https://github.com/mauricioaniche/ck)工具收集58 個程序相關的特征向量,其中包括方法級的參數(shù)(如:使用的數(shù)據(jù)結構、線程數(shù)、方法權重等)以及類參數(shù)(如:同步字段數(shù)量、同步方法數(shù)量等)。在多數(shù)情況下,由于選取的初始特征向量較多,部分特征的數(shù)值是缺失的,存在數(shù)據(jù)不平衡的問題,所以會使少數(shù)類的分類器的性能下降。由于初始選取的特征向量較多,會導致多數(shù)特征值存在缺失,就會造成訓練樣本成為少數(shù)類樣本,影響模型的泛化能力,產(chǎn)生過擬合現(xiàn)象,所以這里采用合成少數(shù)過采樣技術(Synthetic Minority Oversampling Technique,SMOTE)工具,使用過采樣方法,利用少類完全樣本生成新樣本來提升少數(shù)類完全樣本數(shù)量,從而獲得有效的分類模型。鎖機制部分特征屬性說明如表1所示。

        表1 特征屬性說明Tab.1 Feature attribute description

        為了更直觀地觀察不同特征屬性對于鎖機制選擇的重要性區(qū)分,通過選取五個相關性最高的屬性進行熱力圖繪制,如圖6 所示。兩個屬性間的相關性使用皮爾遜相關系數(shù)進行計算,該系數(shù)反映了兩個變量線性相關程度的統(tǒng)計量[17]??梢钥吹綄τ阪i機制(lockid)的選擇,使用的數(shù)據(jù)結構(Structure)、線程數(shù)(NumOfThread)、操作數(shù)(NumOfOperate)、方法權重(methodWmc)等屬性與其之間的相關性數(shù)值分別是0.641、0.612、0.499、0.69,根據(jù)這些相關性將使用改進的隨機森林分類算法對數(shù)據(jù)進行分析。

        圖6 特征屬性相關性熱力圖Fig.6 Heat map of feature attribute correlation

        3.3 隨機森林推薦算法

        考慮到對于不同鎖機制的選擇時影響因素較多,所以需要選取一個合適的推薦模型進行推薦。隨機森林算法能夠處理很高維度的數(shù)據(jù),并且在訓練數(shù)據(jù)較多的情況時,訓練速度較快。盡管隨機森林具有很多優(yōu)點,但仍然有不足之處,傳統(tǒng)隨機森林模型中的決策樹擁有相同的投票權重,而且隨著隨機森林構建的擴大,決策樹生成過于龐大的子葉,使得實驗預測結果過擬合,這影響了其整體分類能力的可靠性,由于每棵決策樹在投票時權重都相等,并且存在生成過于龐大的子葉現(xiàn)象,會影響隨機森林的整體分類能力[18]。

        為了解決上述問題,采用基于錯誤的剪枝法和Kappa 系數(shù)加權隨機森林分類方法對鎖機制的選擇進行了推薦分析,其中使用剪枝操作主要考慮到鎖機制數(shù)據(jù)數(shù)量較大,進而造成的決策樹過于龐大的問題;使用加權操作主要考慮影響鎖機制選擇的特征屬性較多,相同權重的決策樹在分類效果上較低,不能保證最終結果的準確度。

        由于決策樹采用自上而下、分而治之的學習策略,隨著迭代深度增加,節(jié)點所使用的訓練數(shù)據(jù)不斷減少,其對總體數(shù)據(jù)的代表性也會相對降低,導致無法對新數(shù)據(jù)進行合理的分析預測,即“過度擬合”現(xiàn)象[19]。決策樹剪枝是解決上述問題的一個有效途徑,其利用某種評價標準對決策樹進行簡化,減小規(guī)模,提高決策樹的泛化能力。本文選取后剪枝操作[20],后剪枝是指構造出完整的決策樹之后再去查看哪些子樹可以剪掉,從而能夠?qū)ξ粗獢?shù)據(jù)有更準確的預測。

        由于每棵樹訓練集不同,又互相獨立訓練,所以決策樹的分類精度會不同,加之受到樣本類別不平衡的影響,會進一步影響決策樹的分類效果,使得一些效果不好的樹投出錯誤的票數(shù),從而影響隨機森林的分類能力。在隨機森林元分類器訓練的過程中,會隨機地抽取總訓練樣本中的部分數(shù)據(jù)對單個決策樹進行訓練,而未被抽取的數(shù)據(jù)稱為袋外(Out-Of-Bag,OOB)數(shù)據(jù)[21]。為了把較大的權重值分配給效果更好的分類器,本文采用OOB 估計計算分類器中的元分類器的投票權重,利用引入Kappa系數(shù)[22]對權重值進行進一步的計算,加權隨機森林算法如算法1 所示。利用袋外數(shù)據(jù)對決策樹進行的預測能力的評估就成為OOB 估計,在隨機森林構建的同時,每一個決策樹都會計算一個對應的OOB 數(shù)值。通過CK評價每棵決策樹整體分類效果,并根據(jù)CK給每棵決策樹分配投票權重,減少分類效果不好的決策樹對結果的影響,使算法的輸出結果更加合理,提高對數(shù)據(jù)集的整體分類性能。Kappa系數(shù)的計算方法如下所示:

        其中:p0表示的是總分類準確度;pl表示某一類鎖機制的準確度,pl=(ai表示第i類真實樣本個數(shù),bi表示第i類預測出來的樣本個數(shù))。

        算法1 結合Kappa系數(shù)的加權隨機森林算法。

        輸入 訓練數(shù)據(jù)D,全部特征T,決策樹個數(shù)n,隨機森林模型RF;

        輸出 加權的隨機森林模型。

        1)遍歷RF中所有決策樹。

        2)將數(shù)據(jù)集分為袋內(nèi)數(shù)據(jù)和袋外數(shù)據(jù)。

        3)計算整體OOB(D);選取特征變量i,隨機排序,計算OOB(Di)。

        4)針對所有特征變量,重復步驟2)。

        5)計算權重值W(i)為每一個特征變量OOB 的值減去整體OOB值的差乘以每棵決策樹的CK值。

        6)將帶有權重的決策樹更新到RF輸出。

        在算法1 中,W(i)越高,說明變量i越重要;如果W(i)=0,那么說明變量i重要性不大;如果W(i)<0,那么說明變量i有很明顯的噪聲,對模型產(chǎn)生了負面影響。利用特征重要性度量值作為特征排序的重要依據(jù),依次從特征中去掉一個重要性最低的特征,并計算每次剔除后的分類正確率,選取最高正確率對應的特征變量作為最優(yōu)特征選擇結果[23]。

        在實現(xiàn)LockRec 時,設置決策樹數(shù)量、決策樹最大深度、分類數(shù)量以及樹的大小等數(shù)值分別為50、50、4、50,在剪枝算法中,設置的置信水平值越高則剪去的分支越少;值越低,剪去的分支越多,對于置信水平,通常將其值設置為0.25[24]。通過計算待剪枝決策樹T的所有葉節(jié)點的分類錯誤率上限,當前決策樹某葉節(jié)點對n個訓練樣本進行分類訓練,并且計算其對某個樣本分類錯誤的概率,從而求得該節(jié)點的分類錯誤率估計值,依據(jù)算法描述中的剪枝方法進行剪枝操作。在加權算法中,通過計算待加權的決策樹對袋外數(shù)據(jù)的分類效果,并且計算當前決策樹的CK 系數(shù)值,將兩者的乘積作為當前決策樹的權值。針對同步鎖、可重入鎖、讀寫鎖、郵戳鎖等四種鎖,使用上述模型構建一個鎖機制的推薦模型,當有一個新的待推薦并發(fā)程序時,首先獲取其對應上述兩種模型的特征屬性值,將待推薦數(shù)據(jù)進行10 次模型分類,統(tǒng)計這10 次中出現(xiàn)的推薦鎖機制,將次數(shù)最多的鎖機制作為最終鎖機制推薦的結果。

        4 實驗與結果分析

        4.1 實驗平臺及實驗數(shù)據(jù)說明

        本文所有實驗在惠普Z820 工作站上完成的,硬件上,CPU 為Intel Xeon E5-2650 2.60 GHz兩個處理器,每個CPU 有8個處理核且均支持超線程,可以支持32線程同時運行,內(nèi)存為128 GB。軟件上,使用了Deepin Linux 操作系統(tǒng)和軟件工具Eclipse 4.11,JDK版本為1.8.0_211。

        為了驗證剪枝以及加權隨機森林的有效性,選取鎖機制數(shù)據(jù)集(lock)和另外4 個不同的數(shù)據(jù)集(來自UCI 的公開數(shù)據(jù)集,http://archive.ics.uci.edu/ml/datasets),進行了模型準確率、召回率等指標的驗證。數(shù)據(jù)集有關信息如表2所示。

        表2 實驗中使用的數(shù)據(jù)集Tab.2 UCI datasets used in experiments

        對于LockRec 中所使用的決策樹參數(shù)以及模型相關的評價指標如下:

        1)決策樹有關參數(shù)。分別統(tǒng)計傳統(tǒng)隨機森林與改進的兩種隨機森林模型,決策樹個數(shù)在5~100 內(nèi)變化時模型的準確率,這里對應的最大深度與決策樹大小與當前決策樹的個數(shù)相同。

        2)運行次數(shù)。對于同一個數(shù)據(jù)集,在同一決策樹個數(shù)的情況下,重復構建5 次模型,并得到當前情況下的準確率的平均值。

        3)評價指標。準確率(Precision,P)、召回率(Recall,R)、平均絕對誤差(Mean Absolute Error,MAE)和均方根誤差(Root Mean Squared Error,RMSE)的計算式如下:

        其中:真陽性(True Positive,TP)表示樣本的真實類別是正例,并且模型預測的結果也是正例;真陰性(True Negative,TN)表示樣本的真實類別是負例,并且模型將其預測成為負例;假陽性(False Positive,F(xiàn)P)表示樣本的真實類別是負例,但是模型將其預測成為正例;假陰性(False Negative,F(xiàn)N)表示樣本的真實類別是正例,但是模型將其預測成為負例yi為預測值減去真實值。MAE值越小表示推薦系統(tǒng)的推薦精度越高,同樣RMSE值越小也表示推薦系統(tǒng)的推薦精度越高。

        4.2 算法適用性驗證

        為了驗證所提出的模型適用性,本文使用了iris、breast、wine 和glass 四個數(shù)據(jù)集分別對不進行剪枝與加權操作的傳統(tǒng)模型和LockRec模型進行準確率驗證。

        從圖7的對比可以看出,對于iris和breast數(shù)據(jù)集,所提出的LockRec 模型在決策樹數(shù)量較少時波動大,預測準確率有時相較傳統(tǒng)模型要較小,隨著決策樹個數(shù)的增加,準確率穩(wěn)定提高,預測準確率均優(yōu)于傳統(tǒng)模型,并且對iris 數(shù)據(jù)集LockRec 的準確率最后較為穩(wěn)定,在92%左右,對breast 數(shù)據(jù)集則為86%左右。

        圖7 iris和breast數(shù)據(jù)集上不同決策樹個數(shù)的模型準確率對比Fig.7 Accuracy comparison of models with different numbers of decision trees on iris and breast datasets

        在圖8 中,對于wine 數(shù)據(jù)集,所提出的LockRec 模型在決策樹數(shù)量較少時與傳統(tǒng)模型預測準確率幾近一致,隨著決策樹個數(shù)的增加,兩個模型準確率均穩(wěn)步提高,對wine 數(shù)據(jù)集LockRec 的準確率最后較為穩(wěn)定在98%左右;對于glass 數(shù)據(jù)集,LockRec 的準確率一直高于傳統(tǒng)模型,并且在決策樹數(shù)量為30時,就達到了穩(wěn)定,準確率為99%。

        圖8 wine和glass數(shù)據(jù)集上不同決策樹個數(shù)的模型準確率對比Fig.8 Accuray comparison of models with different numbers of decision trees on wine and glass datasets

        4.3 算法合理性驗證

        為了驗證提出的模型對于鎖機制數(shù)據(jù)的推薦合理性,對于鎖機制的數(shù)據(jù)集,實驗還選取推薦系統(tǒng)中常用的如召回率、平均絕對誤差(MAE)、均方根誤差(RMSE)等評價指標對LockRec進行了進一步的驗證。

        圖9 是針對鎖機制數(shù)據(jù)集的兩種模型的對比,可以看到,傳統(tǒng)模型在決策樹個數(shù)較少時其準確率不高,隨著個數(shù)的增加,其準確率穩(wěn)定在85%左右。對比準確率,LockRec 模型即使在決策樹個數(shù)較小時也呈現(xiàn)出了比較好的效果,并且隨著決策樹個數(shù)的增加,LockRec 模型的準確率很快穩(wěn)定95%以上。對比召回率,在決策樹個數(shù)較少時,兩者召回率相近,均隨著決策樹個數(shù)的增加兩種模型均趨于直線上漲,兩個模型召回率最后分別穩(wěn)定在82%和70%,說明LockRec 模型要更優(yōu)于傳統(tǒng)模型。

        圖9 不同決策樹個數(shù)的針對鎖機制數(shù)據(jù)集的兩種模型的準確率及召回率Fig.9 Accuracy and recall rate of two models with different numbers of decision trees for lock mechanism dataset

        由圖10 可以看出,無論MAE 值還是RMSE 值,隨著決策樹數(shù)量的增加,傳統(tǒng)模型與LockRec 模型都呈現(xiàn)直線下降的趨勢,并且LockRec 模型的下降幅度要大于傳統(tǒng)模型。兩個模型MAE 最后分別穩(wěn)定在0.53 和0.83,RMSE 分別穩(wěn)定在0.7 和1.2。LockRec 模型的MAE 值和RMSE 值都更小,表明LockRec模型的預測精度要更高。

        圖10 不同決策樹個數(shù)的針對鎖機制數(shù)據(jù)集的兩種模型的MAE值及RMSE值Fig.10 MAE and RMSE of two models with different numbers of decision trees for lock mechanism dataset

        為了驗證模型對其他非Java 語言的鎖機制的適用性,選取了Python 語言中的鎖機制進行了程序信息收集,并使用LockRec 模型對其進行訓練預測,得到結果如圖11 所示。從圖11 的對比可以看出,對于Python 的鎖機制數(shù)據(jù)集,所提出的LockRec 模型在決策樹數(shù)量較少時與傳統(tǒng)模型準確率相近,在決策樹數(shù)量為25~35 時預測準確率相比傳統(tǒng)模型要較小,但隨著決策樹個數(shù)的增加,在決策樹數(shù)量35 個之后,其準確率穩(wěn)定提高,預測準確率均優(yōu)于傳統(tǒng)模型。

        圖11 對于Python的鎖機制數(shù)據(jù)集不同決策樹個數(shù)的模型準確率對比Fig.11 Accuracy comparison of models with different numbers of decision trees for lock mechanism dataset of Python

        綜上所述,本文所提出的LockRec 模型在對鎖機制數(shù)據(jù)集進行分析預測時有著比其他數(shù)據(jù)集更好的效果,并且所得到數(shù)值結果表明LockRec 模型不論是在準確率還是其他指標上,都要優(yōu)于傳統(tǒng)模型。

        4.4 鎖機制推薦模型驗證

        使用LockRec 對Xalan(http://xalan.apache.org/xalan-j/)、Fop(https://xmlgraphics.apache.org/fop/)進行鎖機制使用推薦,其中Xalan 和Fop 分別有51 個和25 個使用鎖的方法。使用LockRec進行鎖機制推薦結果如圖12所示。

        圖12 LockRec推薦結果Fig.12 Recommendation results of LockRec

        可以看到,對于Xalan 使用LockRec 之后,推薦仍使用同步鎖的有30 個,推薦使用可重入鎖的有10 個、使用讀寫鎖的7 個、使用郵戳鎖的有4 個;對于Fop 中原始使用同步鎖的25個方法,使用LockRec 之后,推薦仍使用同步鎖的有10 個,推薦使用可重入鎖的有8 個、使用讀寫鎖的4 個、使用郵戳鎖的有3個。根據(jù)上述推薦結果,本文對Xalan、Fop 兩個程序進行了手動重構,并分析使用原鎖機制與推薦鎖機制的前后程序執(zhí)行時間。這里使用不同個數(shù)的線程去執(zhí)行重構前后的程序,每個線程數(shù)下均執(zhí)行五次,最后取五次執(zhí)行時間的平均值作為當前線程數(shù)的執(zhí)行時間。

        如圖13(a)所示,對于Xalan 來說,使用LockRec 推薦使用的鎖機制后,在不同執(zhí)行線程數(shù)時,程序整體執(zhí)行時間均有所縮短。程序整體平均縮短時間為127.65 s,當執(zhí)行線程數(shù)為195 時,縮短時間最多為222 s,平均加速比為1.35;如圖13(b)所示,對于Fop 來說,使用LockRec 推薦使用的鎖機制后,在不同執(zhí)行線程數(shù)時,程序整體執(zhí)行時間均有所縮短。程序整體平均縮短時間為70.75 s,當執(zhí)行線程數(shù)為200時,縮短時間最多為180 s,平均加速比為1.29。

        圖13 LockRec推薦前后性能對比Fig.13 Comparison of performance before and after LockRec recommendation

        4.5 有效性威脅

        實驗中有幾個可能威脅有效性的因素:1)由于并發(fā)程序執(zhí)行的不確定性,不排除性能測試實驗結果可能存在細微偏差。為了避免誤差,所有實驗結果都是在5 次運行的基礎上取平均值得到的。2)隨機森林模型的構建依賴測試數(shù)據(jù)的好壞,為了驗證模型的適用性,本文選取多個著名數(shù)據(jù)集對所提出的改進隨機森林模型進行了驗證。3)本實驗只選取了2 個真實應用程序?qū)ockRec 進行了評估,它們并不能代表所有程序,不能完全說明LockRec 在所有的應用程序中可以進行效果良好的推薦,未來的工作中也將使用更多應用程序?qū)ockRec進行測試。

        5 結語

        當程序員開發(fā)并發(fā)程序時,鎖是最常使用的一種同步機制,而使用哪個鎖作為最佳選擇是一個大問題,因為使用不同鎖構造的性能會有很大的不同。本文實現(xiàn)了一個鎖機制使用推薦的方法LockRec,可以幫助程序開發(fā)者選出當前程序代碼的最合適的鎖機制進行使用。在設計和實現(xiàn)LockRec 的過程中,使用兩種改進的隨機森林模型,并且結合實際測試以及真實程序進一步確保最終推薦結果的可信程度。實驗結果表明,LockRec 的推薦效率較為高效,模型推薦準確率平均值可達95.1%,使用推薦后的鎖機制,兩個真實程序性能均有所提高,平均加速比分別為1.35、1.29。在未來的工作中,將針對推薦方法進行進一步的研究,使用可以體現(xiàn)程序間關系的代碼推薦方法來提高鎖機制推薦使用的適用性。

        猜你喜歡
        郵戳線程決策樹
        朝 陽
        文苑(2020年3期)2020-04-21 13:59:02
        給我寫信的那個人老了
        中國詩歌(2019年2期)2019-11-15 03:14:41
        一種針對不均衡數(shù)據(jù)集的SVM決策樹算法
        決策樹和隨機森林方法在管理決策中的應用
        電子制作(2018年16期)2018-09-26 03:27:06
        典藏
        航空知識(2017年7期)2018-02-01 14:42:21
        淺談linux多線程協(xié)作
        基于決策樹的出租車乘客出行目的識別
        基于肺癌CT的決策樹模型在肺癌診斷中的應用
        British Stamps Celebrate the Bicentenary of Pride and Prejudice
        Linux線程實現(xiàn)技術研究
        亚洲精品视频中文字幕| 久久久伊人影院| 在线观看精品国产福利片87| 人妻中文字幕一区二区三区| 99久久精品费精品国产一区二| 国产色在线 | 亚洲| 少妇的丰满3中文字幕| 麻豆AV无码久久精品蜜桃久久| 日韩精品极视频在线观看免费| 小说区激情另类春色| 日本精品极品视频在线| 亚洲捆绑女优一区二区三区| 国产69精品久久久久9999apgf| 久久亚洲精品成人av| 又黄又爽的成人免费视频| 国产va在线播放| 中文字幕一区二区网站| 麻豆精品在线视频观看| 又大又粗欧美黑人aaaaa片| 久久精品国产亚洲av麻| 亚洲国产福利成人一区二区 | 精品蜜桃av免费观看| 亚洲精品无码久久久久y| 麻豆一区二区99久久久久| 国产成人久久精品亚洲小说| 人妻系列中文字幕av| 国产乱人偷精品人妻a片| 麻豆乱码国产一区二区三区| 国产精品一区二区三密桃| 国产精品国产三级国产专播下| 亚洲人午夜射精精品日韩| 欧美成人精品三级在线观看| 少妇深夜吞精一区二区| 国产成人精品亚洲日本在线观看 | 国产三级视频在线观看视主播| 国产精品女同一区二区软件| 蜜臀av午夜一区二区三区| 亚洲无码精品免费片| 青青草视频国产在线观看| 精品精品国产一区二区性色av| 漂亮人妻被强了完整版|