標籤: 電動車

  • Model S 第4次起火 經調查與車身或電池缺陷無關

    據彭博社報導,11月發生在美國南加州的特斯拉Model S車庫起火事件有了新進展,調查人員們認為這次起火事故不是由於車身或電池缺陷引起的,不能被定性為特斯拉今年的第4起起火事故。

    調查人員指出,該起火事故可能是由於充電系統過熱引起的,給車輛充電的電線品質上的缺陷可能是造成事故的原因。

    由於這起事故與Model S本身無關,美國國家公路安全管理局(NHTSA)將調查重點放在今年秋天發生的三起起火事故上。目前所有事故中均無人員傷亡。特斯拉表示會對Model S的懸架系統進行調整,以避免類似事故的發生。

    在田納西州和華盛頓州兩起車禍起火事故後,NHTSA上月對Model S電動車展開複查。第3起事故發生在墨西哥,駕駛當時高速撞上混凝土護欄,上述事故都未造成人員受傷。NHTSA尚未表明複查工作何時完成。

    但德國交通監管當局本月已清除Model S安全瑕疵之慮,移除在德國召回這款電動車的可能性。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • Accelerate Framework in Swift

    Accelerate Framework in Swift

    介紹:

          最近看到這篇文章有對Accelerate框架有一個介紹,自己也按照作者給的思路整理了一遍,也算是對這一框架的一個重新的回顧和學習,在以前研究AR先關只是的時候有接觸到這個框架,贊具體裏面的東西沒有好好的實踐一下,文章中有一些關於向量和矩陣運算的實際的Swift例子。可以簡單的看一下。

         Introduction to the Accelerate Framework in Swift

         關於這個框架和文章其實在前面介紹iOS框架系列文章的時候有提過(第一篇),對這個框架有不清楚是做什麼的可以翻翻我以前總結的文章。 

         由於下面的運算都是些向量和矩陣的運算,要是不清楚他們的概念和運算規則的可以看下面,先了解清楚再往下看,這些具體的內容在項目當中其實還是會用到的,比如說視頻編碼處理、AR等等。

         向量

         矩陣

     

    Accelerate

     

          使用之前請先導入這兩個框架:

          NOTE: 下面所有的例子全都是在 Playground 運行驗證

    import UIKit
    import Accelerate
    import simd

          1、cblas_saxpy  

          函數cblas_saxpy(_:_:_:_:_:_:)是一個計算常數乘以一個向量加上一個向量的函數,具體的使用看下面的例子:

    var x:[Float] = [1,2,3]
    var y:[Float] = [4,5,6]
    
    cblas_saxpy(3, 10, &x, 2, &y, 2)
    

          具體的驗證結果和詳細的函數參數說明我們會在下面展示,大家可以先看上面給出的函數的說明推導一下結果:

          2、cblas_sdot 這個函數能幫助我們計算出兩個向量的數量積:  ∑ a[i] * b[i] 

    y = [4,5,6]
    /// x*y = (1*4)+(2*5)+(3*6) = 32
    /// 這個函數的具體的參數可以參考上面
    cblas_sdot(3, &x, 1, &y, 1)

          3、sgesv_ 這個函數可以幫我們解方程,比如下面的三元三次方程,具體的驗證你可以自己嘗試一下,了解一下函數的參數的意義,我們已經驗證過就不再重複結果。

    /// 下面我們解一個三元方程
    /// 7x+5y-3z = 16
    /// 3x-5y+2z = -8
    /// 5x+3y-7z = 0
    typealias LAInt = __CLPK_integer
    
    var A:[Float] = [
    
        7, 3, 5,   /// x
        5, -5,3,   /// y
        -3,2,-7    /// z
    ]
    
    var b:[Float] = [16,-8,0]
    
    /// 定義要解的是一個幾元方程
    let equations = 3
    /// 方程的個數
    var numberOfEquations:LAInt = 3
    var columnsIntA:LAInt = 3
    var elementsIntB:LAInt = 3
    /// 解的個數
    var bSolutionCount:LAInt = 1
    /// 驗證是否計算有問題
    var outputOk:LAInt = 0
    /// [0,0,0]
    var pivot = [LAInt](repeating: 0, count: equations)
    
    /// 參數定義(按順序):求解的線性方程個數、解的個數、係數矩陣A、
    /// 矩陣A的列數、排列矩陣、係數向量B、向量B的列數、輸出值。
    sgesv_(&numberOfEquations, &bSolutionCount, &A, &columnsIntA, &pivot, &b, &elementsIntB, &outputOk)
    
    /// outputOk == 0 說明一切計算正確
    outputOk
    
    /// 這個結果就是我們想要的答案 [1, 3, 2]
    b
    

     

    simd + vecLib + vDSP

           

          具體的這三個框架的內容文章中有介紹過,我們這裏主要的還是驗證和實踐一下裏面的例子,看下面的代碼。

          1、矩陣的加法運算,看下面的例子,注意下面的不是向量的加法,留意區別不要混淆,代碼簡單我直接截圖順便看驗證結果:

           2、vvfabsf 求絕對值的運算,代碼如下:

    /// fabs 求絕對值
    func floats(_ n:Int32) -> [Float]{
        return [Float] (repeating: 0, count: Int(n))
    }
    
    var count:Int32 = 4
    var aAbsoAbsolute = floats(count)
    
    var c:[Float] = [-1,-2,-3,-4]
    vvfabsf(&aAbsoAbsolute, &c, &count)
    
    /// [1,2,3,4] 
    aAbsoAbsolute

          3、vvintf 小數取整求絕對值

    c = [9.987,6.576,-3.345,-4.9]
    var bAbsoAbsolute = floats(count)
    vvintf(&bAbsoAbsolute, &c, &count)
    
    /// [9, 6, -3, -4]
    bAbsoAbsolute

          4、sqrtf 開平方根

    /// sqrt 開平方根  sqrtf()
    c = [25,16,9,4]
    var cAbsoAbsolute = floats(count)
    vvsqrtf(&cAbsoAbsolute, &c, &count)
    
    /// [5, 4, 3, 2]
    cAbsoAbsolute
    

          5、分數取逆 這時候是分母和分子互換位置在做計算得來的

    /// 分數取逆 這時候是分母和分子互換位置在做計算得來的
    var d:[Float] = [1/3,1/5,3/9,4/2]
    var dAbsoAbsolute = floats(count)
    vvrecf(&dAbsoAbsolute, &d, &count)
    
    /// [3, 5, 3, 0.5]
    dAbsoAbsolute
    

          6、vDSP_vdist 這個例子其實也很有趣的,具體的例子說明可以參考最上面文章的最後一個例子,我們直接看代碼和驗證的結果,代碼裏面有比較詳細的說明,還是值得一看的,能幫助我們回憶鞏固一些知識點:

    var points:[CGPoint] = [
        
        CGPoint(x: 0, y: 0),
        CGPoint(x: 0, y: 10),
        CGPoint(x: 0, y: 20),
        CGPoint(x: 0, y: 30),
        CGPoint(x: 0, y: 40),
        CGPoint(x: 0, y: 50),
        CGPoint(x: 0, y: 60),
        CGPoint(x: 0, y: 70),
        CGPoint(x: 0, y: 80)
    ]
     
    let path = UIBezierPath()
    path.move(to: points[0])
     
    // IMP: Remove the space between the < and points
    for i in 1 ..< points.count {
        path.addLine(to: points[i])
    }
    
    var xs = points.compactMap { (point) -> Float? in
        return Float(point.x)
    }
    
    var ys = points.compactMap { (point) -> Float? in
        return Float(point.y)
    }
    
    var distance:[Float] = [Float](repeating: 0, count: points.count)
    
    vDSP_vdist(&xs, 1, &ys, 1, &distance,1,vDSP_Length(points.count))
    
    /// 遍歷
    distance.map {$0}
    
    /// 順便幫忙在加深一下對 reduce 函數的理解
    /// 給一個初始值 然後對集合的每一個元素進行操作
    distance.reduce(0, +)
    
    let initialResult:Float = 0
    var reduceResult =  distance.reduce(initialResult) { (tempResult,element) -> Float in
        return tempResult + element
    }
    
    reduceResult

         下面是上面例子的結果驗證: 

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 中國四部委再次要求 破除新能源車地方保護

    中國財政部等四部委近日聯合公布了第二批新能源汽車推廣應用城市名單,公告再次明確提出了破除新能源汽車地方保護的要求。業內人士表示,京滬兩大新能源汽車推廣主力城市需要拿出姿態,以警示後續的地方保護行為。

    去(2013)年9月17日,財政部曾在公布的新一輪新能源汽車補貼政策中明確指出,示范城市或區域推廣應用的車輛中外地品牌數量不得低於30%,且不得設置或變相設置障礙限制採購外地品牌車輛。

    隨著國家扶持新能源汽車相關政策不斷出台,北京、上海、天津等地紛紛打造當地新能源汽車產業,考慮到利於當地企業的發展,在引入外非本地企業的新能源汽車品牌時,會制定一些差異化條款,比如優先購買本地新能源汽車等。

    因此在國家推薦的節能與新能源汽車產品目錄之下,地方政府還設定了一個地方性的產品目錄。其中,北京與上海市場針對外地新能源汽車品牌皆有相應的條件要求。

    重慶、呼和浩特等地也紛紛提出,採購和補貼的對象是符合當地政府認定的新能源汽車。天津、河南等地在節能與新能源汽車採購對象上也明確規定,在技術、服務等指標滿足採購需要的前提下,優先採購納入政府採購范圍的電動汽車。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 曠世提出類別正則化的域自適應目標檢測模型,緩解場景多樣的痛點 | CVPR 2020

    曠世提出類別正則化的域自適應目標檢測模型,緩解場景多樣的痛點 | CVPR 2020

    論文基於DA Faster R-CNN系列提出類別正則化框架,充分利用多標籤分類的弱定位能力以及圖片級預測和實例級預測的類一致性,從實驗結果來看,類該方法能夠很好地提升DA Faster R-CNN系列的性能

    來源:曉飛的算法工程筆記 公眾號

    論文: Exploring Categorical Regularization for Domain Adaptive Object Detection

    • 論文地址:https://arxiv.org/pdf/2003.09152.pdf
    • 論文代碼:https://github.com/Megvii-Nanjing/CR-DA-DET

    Introduction

      由於標註成本大,在訓練好檢測算法后,面對差異較大的新場景(類別不變),若想獲取大量的帶標註圖片進行再訓練是很不方便的。對於這種情況,無監督的域自適應方法能夠靈活地自適應新場景,從包含豐富標註信息的源域轉移到無標註的目標域。其中,域自適應方法中比較有代表性的是Donamin Adaptive(DA) Faster R-CNN系列,利用對抗訓練來對齊圖片和實例的分佈,使得模型能夠做到域不變性,具體可以看上一篇介紹。
      但是這些方法大都把無法轉化的背景內容也進行了對齊,而且在實例對齊時,沒有從包含較多低質量的proposal集合中識別出難樣本。為了解決上面的問題,論文提出類別正則化框架,幫助DA Faster R-CNN專註於對齊跨域中的關鍵區域和重要目標。
      論文的主要貢獻如下:

    • 提出新的類別正則化框架,作為域自適應目標檢測算法的插件,不需要額外的標註和超參數。
    • 設計了兩個正則化模塊,分別用於榨取卷積分類器的弱定位能力以及圖像級別預測和實例級別預測間的類別一致性,能夠幫助分類器專註於對齊目標相關區域以及難對齊實例。
    • 對多種域轉移場景進行實驗,驗證論文提出的方法的有效性。從實驗結果來看,類別正則化框架能夠提出DA Faster R-CNN系列方法的性能,並在基礎數據集上達到SOTA。

    Approach

    Framework Overview

      論文方法的整體架構如圖2,在DA Faster R-CNN基礎上添加了ICR(image-level categorical regularization)和CCR(categorical consistency regularization),能夠更好地對齊域間的關鍵區域和重要實例。

    Image-Level Categorical Regularization

      ICR的主要目的是提高主幹網絡的目標特徵提取能力,同時降低背景的激活。結構如圖2b所示,ICR使用源域數據進行有監督訓練,對主幹網絡的特徵輸出進行全局池化,再使用多標籤分類器($1\times 1$卷積)進行分類,損失函數使用標準交叉熵多標籤損失:

      $C$為類別總數,$yc$為GT標籤,$\hat{y}c$為預測標籤,$y^c=1$表示圖片至少包含一個類別$c$物體。

     ICR模塊利用多標籤分類器的弱定位能力,能夠有監督地引導主幹網絡只激活類相關特徵。如圖3所示,類相關的特徵會有較高的激活值。在圖像級對齊時,能夠對齊域間關鍵區域,同時,由於背景沒有參与到圖像級多標籤分類器中,能夠有效減少擬合不可對齊的源背景的可能性。

    Categorical Consistency Regularization

      CCR負責發現難對齊實例,調整實例級對齊損失的權重,基於兩點考慮:

    • 由於不能區分前景和後景,實例對齊模塊可能被低質量背景proposal佔據。
    • 添加的圖像級分類器和實例檢測head是互補的,前者負責獲取所有圖像級上下文信息,後者使用精確的RoI特徵,當兩者預測不一致時,該實例就是難樣本。

      基於以上考慮,論文採用圖像級預測和實例級預測的類別一致性作為目標分類難易程度的判斷,並在目標域中使用該一致性作為正則因子,調節難對齊樣本在實例對齊中的權重。假定$\hat{p}{c}_j$為預測第$j$個實例為類別$c$的概率,$\hat{y}c$為實例預測包含類別$c$的概率,類別一致性的計算為

      使用公式5來加權實例級對抗損失

      需要注意,僅對目標域的檢測head預測為前景的實例使用公式5加權,源域的所有實例和目標域的背景實例均使用$d_j=1$,前者因為是有監督的,而後者則是因為不重要。

    Integration with DA Faster R-CNN Series

      將論文提出的方法加入到DA Faster R-CNN中,ICR為直接加入,CCR為對原損失的修改,最終的損失函數為

      論文也對比了另外一種主流的DA -Faster改進SW-Faster,該方法使用弱全局對齊模型來提升DA-Faster的強圖像對齊模塊,直接加入ICR和CCR,最終的損失函數為

    Experiments

    Comparison Results

      Faster R-CNN(Source)僅使用源域訓練,Faster R-CNN(Oracle)僅使用目標域訓練。

    • Weather Adaptation

      這裏對比模型對天氣的自適應性。

    • Scene Adaptation

      這裏對比模型對不同城市的場景的自適應性。

    • Dissimilar Domain Adaptation

      這裏對比模型對真實圖片和卡通圖片的自適應性。

    Visualization and Analyses

      對前面對比實驗的目標域測試圖片進行了可視化。

      將特徵降維並可視化,藍點為源域樣本,紅點為目標域樣本,可以看到論文的方法能夠讓域間的同分類實例距離更近。
      論文也計算了域間距離,使用Earth Movers Distance (EMD) 測量,SW-Faster, SW-Faster-ICR and SW-FasterICR-CCR的結果分別是8.84、8.59和8.15。

    CONCLUSION

      論文基於DA Faster R-CNN系列提出類別正則化框架,充分利用多標籤分類的弱定位能力以及圖片級預測和實例級預測的類一致性,從實驗結果來看,類該方法能夠很好地提升DA Faster R-CNN系列的性能。



    如果本文對你有幫助,麻煩點個贊或在看唄~
    更多內容請關注 微信公眾號【曉飛的算法工程筆記】

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 特斯拉今年或沿京滬高速布局充電設施

    據阿思達克財經報導,特斯拉產品專家表示,特斯拉預計第二或者第三季度在上海開店,同時,特斯拉在中國的充電設施首先會沿著京滬高速布局,只是具體布局時間暫不確定。

    上述人士表示,特斯拉(Tesla)中國客戶現在訂車,將於今年年底拿到車。上海客戶屆時則可以直接在上海提車,不需要自己出錢把車從北京提到上海。另外,特斯拉客戶可以用自己的燃油車車牌置換,或者參與上海市拍牌。

    據介紹,特斯拉在中國大陸目前有6輛,北京店有3輛上牌車,還有3輛試駕車。

    針對客戶關心的充電問題,該產品專家表示,客戶購買特斯拉的車價裡面已經包含了充電樁費用,消費者不會再另外花錢購買充電樁,隻需要再支付從物業拉電到車位的材料、人工等費用。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 未來3到4年 Tesla規劃在中國生產電動汽車

    特斯拉(Tesla)執行長 Elon Musk 昨(21) 日在華盛頓 Geekpark 大會上表示,公司正準備交付首批S型號的電動車給中國的客戶。Tesla 也正在中國佈建“龐大”的充電站網路,包括在北京及上海的超級充電站。Musk預期,未來 3 ~4 年內,Tesla 公司將開始在中國生產電動汽車。

    在中國本土生產可避免繳付中國25%的入口關稅,因此可讓公司降低電動車售價。Tesla 公司預測,最快在明年,其在中國市場的銷售量將追平在美國的銷量。

    配備85千瓦時電池的S型號電動車,在中國的售價為73.4萬元人民幣(約11.8萬美元),遠高於在美國未計聯邦稅務寬減前的售價約為7.1萬美元,因為加入了運費、增值稅及入口稅。

    該公司自去年8月開始接受中國客戶的訂購,並在去年底於北京一個商場開設了一個800平方米的銷售點,展示其電動車。

    中國商務部:今年是電動汽車消費元年

    中國政府竭盡所能想讓人們購買使用電動汽車,以改善中國的空氣污染問題,而 Musk 相信,Tesla 能幫助中國政府達成這一目標。

    中國商務部研究院消費經濟研究部主任趙萍近日在《2014年消費市場發展報告》新聞發布會上表示,今年將是電動汽車消費元年。政策、產品、設施「三位一體」協同推進,意味著今年將迎來中國汽車電子市場的蓬勃發展。

    趙萍指出,今年限購或將席捲更多城市,使汽車消費在一二線主要城市遭遇到行政力量預製的「天花板」。由於空氣污染等環境壓力,中國汽車市場的產銷趨勢將存在較大的不確定性,自主品牌也將遭受到更大的挑戰。佔社會消費品零售總額比重高達1/4的汽車消費增速放緩,將會降低總消費增長對汽車的過度依賴。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • java併發之volatile關鍵字

    java併發之volatile關鍵字

    Java面試中經常會涉及關於volatile的問題。本文梳理下volatile關鍵知識點。

    volatile字意為“易失性”,在Java中用做修飾對象變量。它不是Java特有,在C,C++,C#等編程語言也存在,只是在其它編程語言中使用有所差異,但總體語義一致。比如使用volatile 能阻止編譯器對變量的讀寫優化。簡單說,如果一個變量被修飾為volatile,相當於告訴系統說我容易變化,編譯器你不要隨便優化(重排序,緩存)我。

    Happens-before

    規範上,Java內存模型遵行happens-before

    volatile變量在多線程中,寫線程和讀線程具有happens-before關係。也就是寫值的線程要在讀取線程之前,並且讀線程能完全看見寫線程的相關變量。

    happens-before:如果兩個有兩個動作AB,A發生在B之前,那麼A的順序應該在B前面並且A的操作對B完全可見。

    happens-before 具有傳遞性,如果A發生在B之前,而B發生在C之前,那麼A發生在C之前。

    如何保證可見性

    多線程環境下counter變量的更新過程。線程1先從主存拷貝副本到CPU緩存,然後CPU執行counter=7,修改完后寫入CPU緩存,等待時機同步到主存。在線程1同步主存前,線程2讀到counter值依然為0。此時已經發生內存一致性錯誤(對於相同的共享數據,多線程讀到視圖不一致)。因為線程2看不見線程1操作結果,也將這個問題稱為可見性問題

    public class SharedObject {
        public int counter = 0;
    }
    

    因為多了緩存優化導致,導致可見性問題。所以volatile通過消除緩存(描述可能不太準確)來避免。例如當使用volatile修飾變量后,操作該變量讀寫直接與主存交互,跳過緩存層,保證其它讀線程每次獲取的都是最新值。

        public volatile int counter = 0;
    

    volatile 不單隻消除修飾的變量的緩存。事實上與之相關的變量在讀寫時也會消除緩存,如同使用了volatile一樣。

    如下 years,months,days 三個變量中只有days是volatile,但是對years,months讀寫操作也和days時也會跳過緩存,其它線程每次讀到的都是最新值。

    public class MyClass {
        private int years;
        private int months
        private volatile int days;
        public int totalDays() {
            int total = this.days;
            total += months * 30;
            total += years * 365;
            return total;
        }
        public void update(int years, int months, int days){
            this.years  = years;
            this.months = months;
            this.days   = days;
        }
    }
    

    這是為什麼?我們分析一下。

    一個寫線程調用 update,讀線程調用totalDays。單線程中,對於update方法,wa與wb存在happens-before關係, wawb 之前執行並對wb可見。

    多線程中rc與wb存在happens-before關係,wbrc之前執行並對rc可見。根據 happens-before傳遞性,wa需要在rc前先執行並對rc可見。

    因為wb是volatile變量,所以rc獲取的years,months也是最新值。

    我們知道出於性能原因,JVM和CPU會對程序中的指令進行重新排序。如果update方法裏面wawb順序被重排,那它們的happens-before關係將不在成立。

    為了避免這個問題,volatile對重排序做了保證 對於發生在volatile變量操作前的其他變量的操作不能重新排序

    由此我們得到volatile通過消除緩存防止重排保證線程的可見性。

    volatile保證線程安全?

    討論線程安全,大家都會提及原子性順序性可見性。volatile側重於保證可見性,也就是當寫的線程更新后,讀線程總能獲得最新值。在只有一個線程寫,多個線程讀的場景下,volatile能滿足線程安全。可如果多個線程同時寫入volatile變量時,則需要引入同步語義才能保證線程安全。

    模擬10個線程同時寫入volatile變量,一個線程讀counter,執行完后正確結果應該是counter=10。

        public static class WriterTask implements Runnable {
            private final ShareObject share;
            private final CountDownLatch countDownLatch;
            public WriterTask(ShareObject share, CountDownLatch countDownLatch) {
                this.share = share;
                this.countDownLatch = countDownLatch;
            }
            @Override
            public void run() {
                countDownLatch.countDown();
                share.increase();
            }
        }
        
        public class ShareObject {
            private volatile int counter;
            public void increase() {
                this.counter++;
            }
        }
    

    執行結果出現counter=5或6 錯誤結果。

    通過 synchronized,Lock或AtomicInteger 原子變量保證了結果的正確。

    完整demo https://gist.github.com/onlythinking/ba7ca7aa5faf00a58f4cedae474fa6f6

    volatile性能

    volatile變量帶來可見性的保證,訪問volatile變量還防止了指令重排序。不過這一切是以犧牲優化(消除緩存,直接操作主存開銷增加)為代價,所以不應該濫用volatile,僅在確實需要增強變量可見性的時候使用。

    總結

    本文記錄了volatile變量通過消除緩存,防止指令重排序來保證線程可見性,並且在多線程寫入的變量的場景下,不保證線程安全。

    歡迎大家留言交流,一起學習分享!!!

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 緬甸小象成功獲救 凸顯盜獵危機仍在

    摘錄自2019年10月2日自由時報報導

    據《路透》報導,緬甸Wingabaw大象庇護營上個月在該國西南部森林,拯救了一隻誤入盜獵者陷阱的4個月大幼象,她的左前腿遭陷阱夾傷,父母推測也慘遭盜獵者殺害。

    現在這隻被命名為艾雅‧賽恩(Ayeyar Sein),雖然腳上還戴著以竹子和繃帶做成的夾板,但在定期清理傷口之下,賽恩的恢復狀況良好,食慾也逐漸恢復正常。

    據專家2018年統計報告指出,目前緬甸僅存1400至2000頭野生象,並有5000頭大象遭囚禁,凸顯出緬甸所面臨的盜獵危機。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 航向公海 海洋吸塵器首次成功收集垃圾

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • Jmeter系列(30)- 詳解 JDBC Request

    Jmeter系列(30)- 詳解 JDBC Request

    如果你想從頭學習Jmeter,可以看看這個系列的文章哦

    https://www.cnblogs.com/poloyy/category/1746599.html

     

    前言

    • JDBC Request 主要是向數據庫發送一個 JDBC 請求(sql 語句),並獲取返回的數據集
    • 它需要和數據庫連接池配置(JDBC Connection Configuration)一起使用,可參考此篇博文:https://www.cnblogs.com/poloyy/p/13182706.html

     

    JDBC Request

     

    JDBC Request 界面介紹

     

    字段含義

    字段 含義

    Variable Name Bound to Pool

    數據庫連接池配置的名稱

    Query Type

    sql 語句的類型

    SQL Query

    • sql 語句
    • 語句結尾不需要添加 ; 
    • 變量用 ? 佔位

    Parameter values

    需要傳遞的變量值,多個變量用 , 分隔

    Parameter types

    變量類型

    Variable Names

    • 保存sql語句返回的數據和返回數據的總行數
    • 用 , 分隔
    • 跳過列用空

    Result Variable Name

    一個 Object 變量存儲所有返回值

    Query timeout(s)

    超時時間;默認0,代表無限時間

    Limit ResultSet

    和 limit 類似作用,限制 sql 語句返回結果集的行數

    Handle ResultSet

    如何定義 callable statements 返回的結果集;默認是存儲為字符串

    後續通過各種栗子來深入理解常用字段的含義

     

    舉栗子的前提

    需要自己找一個有數據庫的數據來練手哦!這裏拿的表數據如下哈

     

    只有 sql 語句的栗子

    JDBC Request

    沒啥特別的,平時 sql 怎麼寫,這裏就怎麼寫

     

    運行結果

     

    參數化的栗子

    JDBC Request

     

    運行結果

     

    知識點

    • 有幾個問號,Parameter value、Parameter type 填寫值的數量要保持一致,用,分隔
    • 問號其實是佔位符,如果學過編程的童鞋應該也知道這種寫法,可以避免 SQL 注入的問題
    • sql 中使用佔位符時,Query Type 必須選擇 Prepared Select Statement 或者 Prepared Update Statement 
    • 我們可以用 Jmeter 變量去賦值,看下面栗子

     

    參數化+變量的栗子

    JDBC Request

     

    運行結果

     

    知識點

    • 如果在 sql 語句中使用變量,且是字符串類型,需要加上引號(前提是變量值沒有加引號),如 ${name} 
    • 如果在 Parameter values 中使用變量,且是字符串類型,不需要加上引號,只需要在 Parameter types 里寫明為 varchar 即可

     

    使用 Variable Names 的栗子

    結構樹

     

    JDBC Request

    添加一個 Debug Sampler 就知道這個字段有什麼作用了

     

    JDBC Request 運行結果

     

    調試取樣器運行結果

     

    知識點

    • mysql:數據庫連接池對象
    • a_#、b_#、c_#、d_#:代錶行數
    • a_1:第 1 行、第 1 列
    • b_2:第 2 行、第 2 列
    • c_3:第 3 行、第 3 列
    • d_3:第 3 行、第 4 列
    • 以此類推….
    • 一般如果 HTTP 請求需要用到 sql 查出來的數據的話,就會用到 Variable names 這個字段

     

    使用 Result variable name 的栗子

    JDBC Request

     

    Debug Sampler  運行結果

     

    知識點

    該變量是個數組,每一個元素代表一條記錄

     

    重點

    關於通過 Variable names、Result variable name 獲取到的值如何提取,我們將在下一篇文章中詳細講解

     

    使用 Limit ResultSet 的栗子

    JDBC Request

     

     

    運行結果

     

    知識點

    • Limit ResultSet 是對 sql 語句返回的結果集限制行數
    •  limit 10 限制只返回了 10 條數據,然後 Limit ResultSet = 6 限制結果集最終只返回 6 條數據

     

      本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?