遺忘之村 wrote:
哇 唉鳳好棒 唉鳳不過就是 半殘的多工阿 我就看看 唉鳳橡 Android 做全多工 會有多順~~~~


  iOS是假多工沒錯,Android一開始是真多工,但是到2.2之後也開始有假多工了,為什麼?

這邊先定義一下真假多工:
假多工:占用記憶體、不占用CPU、程式被關閉(釋放記憶體)後仍可繼續執行
真多工:占用記憶體、占用CPU、程式被關閉(釋放記憶體、CPU)後無法繼續執行

這邊可以看到假多工的優勢:
1.省電:因為背景不占用CPU
2.省記憶體:因為記憶體被釋放也可繼續執行,所以系統可以任意釋放記憶體而不ˋ影響使用
3.順暢:前景程式可以用到100%的CPU與記憶體,這也是iPhone支援周期較長的原因之一,舊硬體仍可以跑得很順
4.易於管理:因為背景不消耗資源,跟關了沒兩樣,所以「關閉程式」的概念就消失了,不必手動管理背景程式。

假多工的缺點:
1.在背景時,無法執行系統預設服務以外的程序(如大檔傳輸、音樂轉檔)。
2.無法同時開啟多個服務(同時播放兩首音樂)
3.程式撰寫需要技術,開發者必須通曉iOS或Android的API才能啟用假多工,但真多工不必這麼麻煩。


假多工的原理:
  多工其實是很簡單的技術,iOS上也不是沒有真多工,只是真多工只有系統能用而已,假多工是對App而言。
一隻App在背景跑,使用者怎麼知道App有沒有在跑呢?
1.聲音播放
2.網路連結
3.該程式有時續性(即程式畫面回隨著時間改變)
4.周邊互動,如GPS、藍芽、USB存取等
  真多工要滿足上述4點可以說是易如反掌,但假多工就要多費一點功夫,聲音播放跟周邊互動可以實作成系統API,讓程式被切換到背景前就先呼叫API,工作就不會中斷,因此背景導航、語音播放、音樂播放都不是什麼難事。
  第2點就比較麻煩,iOS在2009年推出APNS,Android在2010推出C2DM,其原理很簡單,以下以APNS為例,有些程式背景會不斷的存取伺服器(輪詢),來判斷有沒有新的訊息,如MSN,APNS就會把這個「存取伺服器」的動作丟到一個APNS伺服器,由APNS伺服器來幫你存取網路上的訊息,有消息再通知,如此一來就可以節省手機的傳輸資源。這是一個很聰明的作法,因為手機資源有限,將許多網路存取繁重的工作丟到APNS上,你可以跑一堆社群程式卻步消耗記憶體與CPU,因此,Google在Android 2.2開始使用APNS,所以從這版開始,Android變快了、變順了,拜假多工所賜。但很可惜,這技術無法使用在大檔傳輸,如FTP。
  第3點要達成,其實寫程式用一點技巧就可以了,比對程式關閉與開啟的時間,計算出當下應該顯示的畫面即可,可惜的是如果該程式是轉檔、磁碟掃描等大量運算的程式,就無法用假多工達成,但這種高耗能的程式,也不會有人放在背景跑吧?或許有人會說,那把這種高耗能程式放背景,跑很慢,讓前景可以全速跑,那其實就跟假多工的背景凍結差不多了。



  Android上,將播放音樂的程式丟到背景,如果音樂中斷了就可能是真多工(被系統踢掉了),如果音樂沒中斷就可能是假多工,iOS上一律假多工,所以比較單純。
  Android的使用者可以發現,有些程式在背景會消耗資源,導致前景程式變得很頓,特別是賣場那些被開了一堆程式的展示機,要使用者去一一關閉這些程式既辛苦又麻煩,關閉程式時要一直按back鍵,來確保程式釋放資源,借別人手機後要檢查有沒有開了什麼軟體,免得兩三小時後手機就沒電了。

  手機不是一般的電腦,以現在手機的CPU效能、記憶體大小、電池續航力、網路頻寬來看,跑一兩隻程式就已經捉襟見肘了,更別提如同桌機般動輒數十支、數百支程式在跑,桌機擁有手機10倍以上的資源,真多工當然大行其道,但像手機這種行動裝置,有智慧的管理資源的假多工才是趨勢。


  其實,單核心的電腦上,真多工其實也是「模擬」出來的,只有一顆CPU,怎麼可能同時做兩件事?其實也是快速地交換執行的程式,讓你覺得是同時執行。電腦裡的「超執行緒」也是讓四核心看起來像八核心,也不是真的有八個核心,所以,不是假的就是不好,真的就一定好,很多技術一開始都是「假XX」,後來就變成「真XX」,總有一天也會被某個新的「假XXX」取代,電腦工程就是如此不斷進步下去的。

happy = new year(2011);
搞個 雙核/多核處理器 分攤工作就可以.


不然大家沒事搞費電的雙核/多核處理器做什麼?

syntech wrote:
搞個 雙核/多核處理器 分攤工作就可以.


不然大家沒事搞費電的雙核/多核處理器做什麼?


手機上雙核的目的是讓「前景」程式可以跑得更快,有更多資源
雙/多核心從一開始就不是為了多工而設計的
happy = new year(2011);
你的描述有點奇怪.


除了前景程序(Foreground Process),
在看不到的地方還有可視程序(Visible Process)及Service程序(Service process)會占用cpu資源,

多核心本來就是為了多工而設計,
在單核cpu情況下,只能利用context switch 切換不同行程,
但是多核情況下,就還可以切換到另一顆cpu core去執行,
就比較不需要等,
因此多核才會變成一種趨勢,
ipad2 也換成多核,iphone4s/iphone5也要換成多核,



syntech wrote:
除了前景程序(Foreground Process),
在看不到的地方還有可視程序(Visible Process)及Service程序(Service process)會占用cpu資源,


這部分不管有沒有多工都會有
跟多工沒什麼關係
所以我上面沒有贅述


syntech wrote:
多核心本來就是為了多工而設計,
在單核cpu情況下,只能利用context switch 切換不同行程,
但是多核情況下,就還可以切換到另一顆cpu core去執行,
就比較不需要等,
因此多核才會變成一種趨勢,
ipad2 也換成多核,iphone4s/iphone5也要換成多核,


在計算機中
如果有個負載90%的程序在運行
將CPU變成8核
效能也不過增加11%而已
雖然不用等
但也沒變快多少


多核心的目的是讓「單一程式」更快
上述那個占了90%資源的程序
如果可以用多執行緒(multi-thread)去跑
雙核就可以增加100%
比八核還快

iOS的背景loading非常輕
幾乎所有的資源都給前景程式了
因此iDevice多核心的目的是為了加速前景程式
而不是為了多工
happy = new year(2011);
馬克蘇 wrote:
說實話,你要不要先去唸一唸OS相關的課程再回來討論......

一堆亂七八糟似是而非的東西,講得跟真的一樣勒......


那麻煩你告訴我
哪裡錯了?



我主要是討論iOS與Android的真假多工
因此避免有人斷章取義
這部分我寫詳細點
89. wrote:

這部分不管有沒有多工都會有
跟多工沒什麼關係
所以我上面沒有贅述

不管是iOS的假多工
還是Android的真多工
都有前景程序、Service程序(iOS似乎沒有可視程序)
跟真假多工沒關係
所以我沒寫出
happy = new year(2011);
還好這在 Android 版,不在pc版.
不然一定很有趣.

syntech wrote:
還好這在 Android 版,不在pc版.
不然一定很有趣.


多核心究竟是為了單一程式的效能
還是為了多工
你自己看吧
Multi-core
happy = new year(2011);
個人是奉勸樓主 看身邊親朋好友 有沒有人買該機 如果還是如你所說不合你意.那就換其他廠牌的吧
個人當初也是奉勸我家妹妹別買iphone4 因為我用的展示機很頓 不順 ,結果他買來用整個很開心,令我驚艷
那時候才知道展示機會何拿到手上的完全新品有所差距,大概是被玩太多次快殘掉

所以囉,買你所想,用你所用,有疑問爬文.討論.發問
而不是在這邊發悲觀的文章討戰
89. wrote:
多核心究竟是為了單一程式的效能
還是為了多工


你這樣寫是省略了重要的部分.
可以做到盡量平行處理的 multithread 程式,
或最少是 multithread 程式,
才是你說的那種,

不過可以做到的程式沒那麼多,
大多還是單執行緒的程式,
對於同時執行多個單執行緒程式(multi processing),
就會變成你前面說的真假多工的情況,
多core就多增加分配到cpu的機會,
就比較不會出現卡卡的情況.

這裡其實還出現一個問題,
到底android 2.3 /3.0 支援multithread到什麼程度?


關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 13)

今日熱門文章 網友點擊推薦!