make -jN

今天又一次嘗試編譯安卓,想測試一下編譯的速度如何?編程

       考慮機器是4核8線程,就用上了 make -j8,感受上上速度是很快,刷屏就下來了,不過錯誤了,錯誤的提示大概是某個文件的規則沒找到,想一想了多線程併發執行會不會涉及到同步的問題,因而就有了這篇。windows

        尷尬的clear掉沒用的東西,由於發現繼續make居然從新開始了。最後用了 make -j4從新試了試,結果沒有任何異常。多線程

 

        首先,從CPU的核心數想這個問題,我用的虛擬機來編譯的,分了4個核給虛擬機,發現window下cpu的佔用率始終是50%上下波動。最後發現windows認爲個人cpu是8核的,這就是inter cpu牛的地方嗎?併發

        從這裏想到編程之美上的一道題目,若是讓cpu使用率50%的狀態,那麼讓半數線程滿載運行也行?或者是用定時器讓每一個核心以50%的時間工做在while()之下,另一半時間調用idle(),總之感受上可行,有時間不妨來試試。測試

       這裏就明白了一個現象,window能識別出來的核心數,和分配給虛擬機核心數之間的關係。線程

 

      這樣 make -j8  就是讓8個線程讓4個核心競爭的執行,(只考慮相關的線程),make -j4 就是4個線程然競爭4個核心。同步

      這樣同步的問題第一種狀況會明顯比第二種狀況激烈,出錯也是有很大可能的。 虛擬機

      不過,應該更關注make 多線程編譯怎樣避免出錯的問題? 首先很明顯多線程能提交編譯速度,可是若是不處理好依賴關係就會形成編譯出錯的問題。編譯

      若是依賴問題沒有處理好,就只能單線程這樣避免編譯出錯。若是依賴關係設置過於保守,則可能自己編譯的可並行度就降低了,也不能取得最佳的效果,總之還有一個平衡的問題。定時器

   最後也沒找到特別合適的出錯的緣由,只好歸咎於多線程競爭吧

相關文章
相關標籤/搜索