當前位置:首頁 » 安卓系統 » android多核

android多核

發布時間: 2022-05-28 06:10:47

A. 隨筆之如何判斷Android應用進程是否為單線程及閑扯多核並行編程

我最早接觸多核知識是2008年末到2009年初。背景很簡單,我是做高性能網路數據傳輸伺服器的,類似FTPServer一樣。伺服器的吞吐能力最好是隨著CPU核數的增加成倍增長.。根據多核並行的知識,這是最理想的情況(有一個公式,可以計算性能和CPU核數的關系),但應用內部各個線程並非完全獨立。即線程是獨立運行在不同CPU核上,但是線程中所乾的事情卻在邏輯上有關系。例如運行在線程A上的函數等待運行在線程B上另外一個函數的執行結果。這樣就導致性能不是隨CPU核數線性增長。 根據上面的介紹,對於多核並行編程來說,最最重要的事情就是將你的應用中那些混淆不清的邏輯關系能拆成互不幹擾或者互相牽連較少的模塊,並讓他們在不同線程上運行。這樣就真正發揮多核的優勢了。 1 對於純邏輯關系的問題,也就是非計算方面(即矩陣計算,編解碼等),要想能掰叱清楚。難度很大。七大姑,八大姨的,能分那麼清楚嗎?目前,這方面的資料較少。 2 對於純計算方面的問題,例如矩陣計算,要研究的就不是編碼,而是數學,要把計算拆成各個小塊,每個小塊可單獨運行在獨立線程上,然後再匯總計算結果。這方面資料較多,如周偉明的《多核計算與程序設計》。編程角度看,OpenMP是一個多核並行計算的好庫。(有人能嘗試下用OpenMP來拆分邏輯工作嗎?) 好了。多核的故事閑扯到這,對於純邏輯關系問題,再扯的話就會扯到線程池,並發編程,非同步IO,驚群效應,分布式內存管理等等等等。 下面來看如何判斷Android應用進程為單線程還是多線程?請先思考,再看下面的答案:1android應用是運行在android環境中的,簡單來說,是運行在dalvik虛擬機之上,而dalvik虛擬機本身是會創建一些線程,例如垃圾回收線程,JDWP調試線程2Android應用會經常利用binder和系統服務進行IPC通信,根據binder本身的特性,它會動態創建線程來完成外界請求。 以上兩類線程都是應用不可控的,保守估計,這類不可控線程至少在3個左右3除了主線程之外的,就是應用自己是否會創建線程了。 查看一個進程中線程的方法有: ps,加一些參數(具體忘記了),可看某個進程下的線程及線程號,但無法區別是系統創建的線程還是應用自己創建的線程 kill -3 對應進程pid,這個方法會向進程發送SIGQUIT消息,dalvik虛擬機會跟蹤這個信號,並列印該進程所有線程的堆棧到一個文件 native代碼(如Jni庫)如果直接調用posix創建線程,則上述方法無法跟蹤(如果該線程能回調到Java層,也可以獲取信息),只能根據ps得到的信息,減去SIGQUIT得到的信息來判斷了。不過這類線程一般都是應用自己創建的。

B. android獲取手機cpu是單核還是多核的方法

android的Cpu信息是存在/sys/devices/system/cpu中的,在目錄中,我們可以看到存在多個文件,一個文件就是一核Cpu的信息。上面寫有cpu0,cpu1,cup3諸如此類的文件夾。要獲得它是幾核的Cpu,只要讀取一下那個cpu目錄下有幾個cpu+數字的文件夾就可以了。/** * Gets the number of cores available in this device, across all processors. * Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu" * @return The number of cores, or 1 if failed to get result */private int getNumCores() { //Private Class to display only CPU devices in the directory listing class CpuFilter implements FileFilter { @Override public boolean accept(File pathname) { //Check if filename is "cpu", followed by a single digit number if(Pattern.matches("cpu[0-9]", pathname.getName())) { return true; } return false; } } try { //Get directory containing CPU info File dir = new File("/sys/devices/system/cpu/"); //Filter to only list the devices we care about File[] files = dir.listFiles(new CpuFilter()); //Return the number of cores (virtual CPU devices) return files.length; } catch(Exception e) { //Default to return 1 core return 1; }}

C. 為什麼安卓的機子在性能上很難超過蘋果的還多核什麼的

雖然很多Android手機的配置都比iPhone要高,比如大多數Andorid手機的內存都有1GB,而iPhone 4S只有512MB內存,但用過iPhone的人都知道Android手機在使用的時候總感覺沒有那麼順滑,究竟為什麼會出現這種現象呢?一位軟體工程師和前Google實習生Andrew Munn解釋說是因為Android系統UI效率低下的框架設計的問題。
不過,這個實習生Andrew Munn是一個軟體工程專業的本科畢業生,他在Android團隊並沒有在框架團隊工作,也沒有看過Android渲染的源代碼,因此他所說的未必是100%准確。並且他也曾經在Windows Phone團隊工作過,因此可能會不自覺的對Android產生偏見。以下就是他對Android為什麼沒有iOS流暢體驗的看法。
Android沒有iOS流暢的原因並非Java GC導致暫停,也不是因為Android運行的是Java編譯的bytecode而iOS運行的native code,根本的原因是,iOS的UI渲染採用實時優先順序,而Android的UI渲染遵循傳統電腦模式的主線程普通優先順序。
這聽起來似乎很抽象和難以理解,但大家可以嘗試一下,使用你的iPad或者iPhone,打開Safari,然後載入一個復雜的網頁,例如新浪網首頁,當網頁載入到一半的時候,把你的手指放在屏幕上,並且四處移動,你會發現所有的渲染立刻停止,在你拿開手指前,網頁永遠也不會繼續載入。
而在Android設備上重復這個操作,你會發現,瀏覽器會繼續嘗試載入頁面並渲染HTML,試圖多任務同時進行,因此對於Android來說,一個高效的雙核處理器是很重要的,這也就是Galaxy S II能夠非常平滑的原因。
在iOS中UI渲染過程具有絕對的優先等級,當用戶接觸到iPhone的觸摸屏後,iOS中所有的進程都將停止,UI線程攔截了所有的事件,系統會將所有資源用於渲染UI過程,以保證用戶界面的實時渲染優先順序。而在Android系統中UI渲染過程的優先順序別卻沒有那麼高,也就是說當你觸摸Android手機屏幕的時候,系統後台的程序並沒有停止,仍然在繼續運行之中,比如下載和查收簡訊,這樣系統UI獲得的資源就不夠,這就是Android系統不流暢的原因。
由於這個原因,新發布的Galaxy Nexus,甚至配備四核處理器的話說EeePad Transformer Prime平板電腦都無法保證順滑的操作體驗,這些設備只能與3年前的iPhone順滑程度相比,那麼Android團隊為什麼不從根本解決這個問題呢?
除了UI渲染之外,Android缺乏有效的的硬體加速也是一個原因,在不同的Android手機上的硬體加速存在巨大差異,而蘋果是唯一一個既做硬體又做軟體的手持設備公司,只有蘋果可以在硬體中插入對軟體的優化,使得基於蘋果晶元的設備不僅省電,而且流暢。
實際上,Android的開發工作在第一代iPhone發布之前就已經開始了,原始Android原型體被設計成為使用鍵盤手機的設備,也就是黑莓手機的競爭對手。UI渲染優先順序別在有鍵盤的手機上並沒有那麼重要。但是在iPhone發布之後,Android小組為了快速推出能與iPhone競爭的產品,迅速將Android改成觸摸屏手機系統,但那時重寫UI框架已經不可能了。因為如果這樣Android應用市場中的所有程序將變得不可用,這種關系將一直處於惡性循環之中。
(這個實習生的偽科學真是編的好,在此反駁)
按照那個實習生的說法,android的ui不流暢是因為響應UI處理的優先順序不夠,而google不改進的原因是因為怕影響到已經發布的應用程序?
這人根本不懂ios和android的進程式控制制機制,且不說ios中ui有最高優先順序(笑啊,ios什麼時候UI有最高級了,明明是系統中斷才是最高),竟然說出了android觸摸UI時後台進程保持運行這樣的荒謬的事情,我都懷疑他是不是在google呆過。 即便他說的UI優先順序有理,也不可能出現改變優先順序就會使得程序進入惡性循環這種情況。了解android系統架構應該知道負責圖形處理(關於優先順序部分)的是位於android系統的倒數第二層,也就是內核的上一級,而且android的設計是層與層之前低耦合的,每層對於下一層的依賴僅通過介面來調用,而層內的變化根本不會影響到層外行為。
說簡單一點,就如同你去銀行櫃台辦事,你辦外匯就去外匯窗口,債券就去債券窗口,而銀行內部怎麼處理你的請求是他們的事,你只需要提交你的數據並接收結果即可,銀行內部員工變動也不會影響你的事務辦理。如果真如這個實習生所說,是UI框架處理優先順序的問題,google大可以輕輕鬆鬆直接提高優先順序,絕不會影響到現有任何程序,因為目前沒有任何程序能繞過android的程序框架直接調用到UI下層的方法,因此下層的改進也不會對上層造成兼容性的不適。而且也不增加什麼生產成本。
但為什麼還是感覺android比ios卡?我覺得這是人雲亦雲後的「被變卡」感覺(很多人在概念空白時先入為主的被教唆到android比ios卡,不如ios,而且聽多了這樣的話後自然自己的感覺就不準了),以至於出現了N種關於android為什麼不如ios的「科學、內幕」解釋。我覺得除了辯證還要用發展的眼光來分析這個問題。
在早期,android的優化的確不如ios,這源自於產品的設計理念和年代(android本身是07年才被收購的一個公司,之前這個系統根本沒有得到實際的驗證,而ios始終是在apple下從mac時代起就被打造的)。而硬體也遠沒有iphone強,加上開放免費,什麼魚龍混雜的製造商都加入進來,元器件供應商也是水很深,造成產品水平參差不齊。很多人對android和ios的差距的認識也是從那時才建立的,而看iphone,一年才出一款機器,無論軟體還是硬體,從選擇供應商到製作,有足夠的周期,都是精挑細琢。也就是說,android陣營從低端到高端都有,且低端又多又亂所謂的高端少而不精,而iphone就一個高端,這就如田忌賽馬,老拿人家優秀的比垃圾的,自然而然口碑也就落成了android不如ios的一個大范圍印象。其實這個時代跟ios產品比較,也的確是android的東西不如iphone做得好。
但是近年來android的機器硬體基本上已經超過了iphone但為什麼還是覺得比ios卡?除了上述的心理因素遺留之外,我個人覺得其實這無關android本身,並不是os優化這么簡單的事。而是硬體問題,其實沒有人特別在意這個問題,但是我想說這就如同顯示器的響應時間,響應時間快,在播放時就會流暢沒有拖影。
電容屏也有響應時間,而且對工作環境電壓要求很高,普通的電容板本身響應就比較慢,大概才50~100ms,而且在電壓不穩定時反應更慢,而iphone4的電容板響應時間在10~20ms,差距近80ms說是不到十分之一秒,但是在實際體驗時這就能影響到人們的直覺。另一個因素在於觸屏的玻璃材質,硬度越高越順滑,這是根據阻尼系數和摩擦系數可以測出的。同是鏡面的情況下,硬度越高的材質在摸上去的時候更順滑。iphone用的是大猩猩,硬度達到7,裸身時本身觸感就順滑,沒有拖沓感,再加上大多數買iphone的人貼膜都會比較下本錢(我貼膜花了129),貼膜也會影響到觸感。在普觀android手機,用上大猩猩的寥寥無幾,再肯貼好膜的更是少。在手感上也比iphone要差了。
就我個人長久使用親身體會是,android的UI其實缺少過度動畫,比如在界面切換時的細節(仔細看,ios的界面切換時除了窗口會移動,標題欄和上面的控制項都會以不同的速率在移動,感覺很動感精緻,如同流水般),這樣在操作時造成了突兀感。實際上從觸摸角度來講,我覺得兔子沒有明顯的差異。而且明顯的感覺是,如果iphone有後台程序,或者運行過較多程序之後,哪怕是普通的界面切換也會有卡頓感覺,很明顯的。
最後一點重要的補充就是iOS是偽多線程開發,Android更注重編程模型,iOS更注重用戶體驗。Android將應用內(進程內)渲染(controls)和進程間渲染(surface flinger)放在了不同的模塊、空間,導致動畫時線程切換過於頻繁,需要更高的性能的晶元才能達到和iOS相同的效果;要配合渲染也變得很復雜,所以在橫豎屏切換時沒有像iOS那樣的轉屏動畫。

D. 安卓4.2系統是否能有效支持多核CPU

安卓4.2可以支持多核CPU
android 4.2系統十大特性:
1、完整的Chrome瀏覽器
Android 4.2的Web瀏覽器的變化將非常受歡迎,支持選項卡瀏覽系統以及書簽同步。這樣的設計為了使手機和平板電腦的使用和傳統PC使用無異。
2、全新的手機風景模式
作為Android 4.2,將集合手機以及平板電腦一體,在使用手機時,可以使用類似於平板電腦尺寸的風景模式,並且可以進行反轉。
3、全新的文件管理器
Android 4.2將集合一個全新的文件管理器,使用戶可以方便的管理SD卡上的文件,而不再依賴於第三方軟體。
4、文本輸入選項的改進
Android 4.2重新設計了鍵盤的布局,甚至將無用的數字和符號都一並略去了。
5、一個明確的升級方法
Google似乎已經對升級操作系統後產生的各種混亂場景感到非常厭倦,因此在5月份發布的升級,Google必須保證硬體方面足夠指標才能升級操作系統。希望這次Android 4.2新版的系統中,對於硬體方面的要求不再是個問題,這將使得所有用戶可以使用新的Android版本。
6、Android Key Lime Pie精簡版
這個版本有點像Windows XP的上網本,擁有大部分功能,但是對於硬體要求稍低。
7、具有開關切換的用戶界面
眾多Android生產廠商都會自定義Android,幫助手機更好的服務使用者。但與此同時,如果能停用某些用戶界面,而恢復到標準的Android將是一個不錯的功能。
8、全新的電源管理系統
全新的電源管理系統將有效的分配電池的合理使用,例如犧牲瀏覽下滑頁面的速度而因此獲得20分鍾發簡訊息的時間。
9、更為輕便的主題模式
Android 4.2是漂亮的,不只是黑色背景上的白色文字。當然,我們可以使用不同的圖片作為背景。
10、全新的鎖屏頁面
當進入鎖屏頁面時,Google已經試圖放入一些有關來電和消息的信息。雖然這樣做未免會有一些安全風險,但Android應該能人為的控制開關這個功能。

E. android多核,多線程該如何用

在程序開發的實踐當中,為了讓程序表現得更加流暢,我們肯定會需要使用到多線程來提升程序的並發執行性能。但是編寫多線程並發的代碼一直以來都是一個相對棘手的問題,所以想要獲得更佳的程序性能,我們非常有必要掌握多線程並發編程的基礎技能。
眾所周知,Android 程序的大多數代碼操作都必須執行在主線程,例如系統事件(例如設備屏幕發生旋轉),輸入事件(例如用戶點擊滑動等),程序回調服務,UI 繪制以及鬧鍾事件等等。那麼我們在上述事件或者方法中插入的代碼也將執行在主線程。

一旦我們在主線程裡面添加了操作復雜的代碼,這些代碼就很可能阻礙主線程去響應點擊/滑動事件,阻礙主線程的 UI 繪制等等。我們知道,為了讓屏幕的刷新幀率達到 60fps,我們需要確保 16ms 內完成單次刷新的操作。一旦我們在主線程裡面執行的任務過於繁重就可能導致接收到刷新信號的時候因為資源被佔用而無法完成這次刷新操作,這樣就會產生掉幀的現象,刷新幀率自然也就跟著下降了(一旦刷新幀率降到 20fps 左右,用戶就可以明顯感知到卡頓不流暢了)。

為了避免上面提到的掉幀問題,我們需要使用多線程的技術方案,把那些操作復雜的任務移動到其他線程當中執行,這樣就不容易阻塞主線程的操作,也就減小了出現掉幀的可能性。

那麼問題來了,為主線程減輕負的多線程方案有哪些呢?這些方案分別適合在什麼場景下使用?Android 系統為我們提供了若干組工具類來幫助解決這個問題。
AsyncTask: 為 UI 線程與工作線程之間進行快速的切換提供一種簡單便捷的機制。適用於當下立即需要啟動,但是非同步執行的生命周期短暫的使用場景。
HandlerThread: 為某些回調方法或者等待某些任務的執行設置一個專屬的線程,並提供線程任務的調度機制。
ThreadPool: 把任務分解成不同的單元,分發到各個不同的線程上,進行同時並發處理。
IntentService: 適合於執行由 UI 觸發的後台 Service 任務,並可以把後台任務執行的情況通過一定的機制反饋給 UI。
了解這些系統提供的多線程工具類分別適合在什麼場景下,可以幫助我們選擇合適的解決方案,避免出現不可預期的麻煩。雖然使用多線程可以提高程序的並發量,但是我們需要特別注意因為引入多線程而可能伴隨而來的內存問題。舉個例子,在 Activity 內部定義的一個 AsyncTask,它屬於一個內部類,該類本身和外面的 Activity 是有引用關系的,如果 Activity 要銷毀的時候,AsyncTask 還仍然在運行,這會導致 Activity 沒有辦法完全釋放,從而引發內存泄漏。所以說,多線程是提升程序性能的有效手段之一,但是使用多線程卻需要十分謹慎小心,如果不了解背後的執行機制以及使用的注意事項,很可能引起嚴重的問題。

F. 打開一個app需要多核嗎

安卓打開一個app需要八核差不多。
(6)android多核擴展閱讀:手機軟體,主要指安裝在智能手機上的軟體,完善原始系統的不足與個性化。使手機完善其功能,為用戶提供更豐富的使用體驗的主要手段。手機軟體的運行需要有相應的手機系統,市場常用的手機系統:蘋果公司的iOS、谷歌公司的Android(安卓)系統、塞班平台和微軟平台。
智能手機,是指像個人電腦一樣,具有獨立的操作系統、獨立的運行空間,可以由用戶自行安裝軟體、游戲、導航等第三方服務商提供的程序,並可以通過移動通訊網路來實現無線網路接入手機類型的總稱。
隨著智能手機的普及,人們在溝通、社交、娛樂等活動中越來越依賴於手機app軟體(app,英文application的簡稱,即應用軟體,通常是指iPhone、安卓等手機應用軟體)。手機軟體是通過分析,設計,編碼,生成軟體,而手機軟體是一種特殊的軟體。

G. android針對多核做優化了嗎

目前應該沒有,,,因為大部分的手機應用使用兩個核心,,用不到第三個核心,,

H. 為什麼安卓手機CPU一般都是8核心

目前來說,安卓手機的CPU一般都是採用八核心設計的。

之所以會出現不同廠家、不同型號的手機CPU都採用八核心設計的現象,是因為以下幾方面原因:

1、軟體對於硬體性能的要求。

2、硬體設計的能力。

3、晶元生產的能力。

事實上,手機CPU並不是天生就有八核心的。……今天的手機CPU,是經過不斷的技術發展,從最初的狀態一點一點升級上來的。

早期的手機,採用的是模擬信號,其CPU設計也非常簡單。

後來,有了數字技術的加持,手機的發展開始走進快車道。直到出現了智能手機。

早期的手機,其功能僅限於打電話、發信息。

後來,手機的功能日益豐富,最終發展出智能手機,成為人們日常生活中不可缺少的工具。

到了這時候,手機軟體對於硬體的性能要求就越來越高了,於是,手機CPU的發展速度也就更快了。

由於CPU採用的超大規模集成電路的設計和生產受到技術條件的限制,不可能無限提升性能,於是,多核心CPU就開始出現……逐步發展,就有了今天的八核心CPU……

事實上,CPU當然不止能做成八核心……六核心乃至更多的核心都是完全可以做得到的……但是在目前技術條件下,八核心是性價比最高的選擇,於是,各個廠家就都把八核心cpu當做目前的重點來進行研發和生產了……

I. 安卓系統到底支不支持多核,大手們解釋一下

支持,現在都已經有相關的產品的,肯定是支撐的。
可是由於現在安卓系統的發展下,暫時還是沒有跟上硬體的發展,現在單核和雙核,甚至是四核的,實際上是沒有具體感受上的差別。(優化好的話)
現在也沒用特別為雙核四核開發的應用游戲,因此單核和雙核四核差距只能在一下跑分軟體上分別。

J. Android中,多核處理與單核多任務處理的實質是什麼

每個運行在線程中的任務都可以分解成多條指令,而且這些指令不用同時執行。所以,單核設備可以首先切換到線程1去執行指令1A,然後切換到線程2去執行指令2A,接著返回到線程1再去執行1B、1C、1D,然後繼續切換到線程2,執行2B、2C等等,以此類推。
這個線程之間的切換十分迅速,以至於在單核的設備中也會發生。幾乎所有的線程都在相同的時間內進行任務處理。其實,這都是因為速度太快造成的假象,就像電影《黑客帝國》里的特工Brown一樣,可以變幻出很多的頭和手。

熱點內容
地鐵逃生怎麼進入游戲安卓 發布:2024-05-03 17:49:35 瀏覽:992
aws雲存儲 發布:2024-05-03 17:48:50 瀏覽:954
安卓微信王者號怎麼轉成蘋果 發布:2024-05-03 17:44:38 瀏覽:745
原子類源碼 發布:2024-05-03 17:44:19 瀏覽:165
安卓瀏覽圖片如何全屏 發布:2024-05-03 17:24:08 瀏覽:104
傳奇倉庫腳本 發布:2024-05-03 17:23:56 瀏覽:541
2010資料庫技術及應用 發布:2024-05-03 17:21:51 瀏覽:921
小米賬號密碼忘了怎麼 發布:2024-05-03 17:17:44 瀏覽:780
皇家農場腳本 發布:2024-05-03 16:46:41 瀏覽:458
順序存儲鏈式存儲 發布:2024-05-03 16:46:41 瀏覽:879