Android Планаванне працэсу

Я спрабую атрымаць лепшае разуменне таго, каб я мог сферу ўплыву надзейнасці ад магчымых праблем сумяшчальнасці пры стварэнні андроіда прыкладання/сэрвісу. Я хацеў бы высветліць, як прыярытэт працэсу вызначаецца. Адрозненні ў прыярытэтах паміж паслугамі і дзейнасцю, а калі планавальнік апрацоўвае іх прыярытэт па-рознаму. У асноўным я спрабую атрымаць глыбокае разуменне таго, як верагоднасць таго, што дзейнасць ці паслугу галадала ізгой працэсаў з іншага прыкладання (ці нават ядро ​​Linux.)

Хто-небудзь ёсць якія-небудзь добрыя спасылкі, якія вы маглі б рэкамендаваць ... Мае пошукі не прыйшло шмат, але.

Дзякуй!

Edit: Маё неспакой адносна працэсарнага часу наразання/планавання, а не рэсурсы памяці (рэсурсы памяці добра апісаны ў дакументацыі андроіда.) Яшчэ раз дзякуй!

34

3 адказы

У наступным спісе прадстаўлены розныя тыпы працэсаў у парадку важнасці (першы працэс з'яўляецца найбольш важным і забіты апошні):

  1. Працэс пярэдняга плана
  2. <Літый> Бачны працэс
  3. Працэс службы
  4. <Літый> Фонавы працэс
  5. Empty працэс

Note: Android ranks a process at the highest level it can, based upon the importance of the components currently active in the process. For example, if a process hosts a service and a visible activity, the process is ranked as a visible process, not a service process.

This is referenced from here Processes and Threads

EDIT:

<Моцны> Разуменне прыярытэту прыкладанняў і працэсаў Дзяржавы

Парадак, у якім забіваюць працэсы, каб вярнуць рэсурсы вызначаецца прыярытэтам размешчаных прыкладанняў. першачарговасці прыкладання роўна яго найвышэйшым прыярытэтам кампанента.

Калі два прыкладання маюць аднолькавы прыярытэт, працэс, які быў больш нізкіх прыярытэтам даўжэй будзе забіты першы. Прыярытэт працэсу таксама залежаць ад міжпрацэсных залежнасцяў; калі дадатак мае залежнасць ад службы або пастаўшчыка кантэнту, які пастаўляецца другім дадаткам, другаснае дадатак будзе мець, па меншай меры такі ж высокі прыярытэт, як прыкладання ён падтрымлівае.

Усе Android прыкладанне будзе працягваць працаваць і ў памяці, пакуль сістэма не мае патрэбу ў сваіх рэсурсах для іншых прыкладанняў.

Гэта важна структураваць прыкладанне правільна, каб гарантаваць, што яго прыярытэтам з'яўляецца прыдатным для працы ён робіць. Калі вы гэтага не зробіце, то ваша прыкладанне можа быць забіты, калі ён знаходзіцца ў сярэдзіне нешта важнае. Ніжэй прыведзены спіс дэталі кожнага з станаў прыкладання, паказаныя на малюнку, якія тлумачаць, як стан вызначаецца кампанентамі прыкладанняў, якія змяшчаюць яго:

Active Processes Active (foreground) processes are those hosting applications with components currently interacting with the user. These are the processes Android is trying to keep responsive by reclaiming resources. There are generally very few of these processes, and they will be killed only as a last resort.

enter image description here

<Р> Актыўныя працэсы ўключаюць у сябе:

1.Activities ў «актыўным» стане; гэта значыць, яны знаходзяцца на пярэднім плане і адказваць на прыстасаваныя падзеі. Вы будзеце даследаваць актыўнасць дзяржавы больш падрабязна далей у гэтым раздзеле.

2.Activities, Паслугі, або радыёпрыёмнікі, якія ў цяперашні час выконваюць у OnReceive апрацоўшчык падзей.

3.Services, выкананых апрацоўшчык падзеі OnStart, OnCreate або OnDestroy.

Visible Processes Visible, but inactive processes are those hosting “visible” Activities. As the name suggests, visible Activities are visible, but they aren’t in the foreground or responding to user events. This happens when an Activity is only partially obscured (by a non-full-screen or transparent Activity). There are generally very few visible processes, and they’ll only be killed in extreme circumstances to allow active processes to continue.

Started Service Processes Processes hosting Services that have been started. Services support ongoing processing that should continue without a visible interface. Because Services don’t interact directly with the user, they receive a slightly lower priority than visible Activities. They are still considered to be foreground processes and won’t be killed unless resources are needed for active or visible processes.

Background Processes Processes hosting Activities that aren’t visible and that don’t have any Services that have been started are considered background processes. There will generally be a large number of background processes that Android will kill using a last-seen-first-killed pat- tern to obtain resources for foreground processes.

Empty Processes To improve overall system performance, Android often retains applications in memory after they have reached the end of their lifetimes. Android maintains this cache to improve the start-up time of applications when they’re re-launched. These processes are rou- tinely killed as required.

For more info look at here(I found on this blog) Memory Management in Android

<Моцны> EDIT:

I think Android is basic Linux so, whatever scheduler works for Linux is same in Android. 

The difference between Android scheduler and Linux scheduler

Планавальнік - 5 файлаў - Андроід ядро ​​змяшчае таксама невялікія змены ў працэсе ЦП планавальніка і алгарытмы часу вытрымлівання. Мы не ведаем гісторыю гэтых змяненняў, а таксама ўплыў не было відавочна, на аснове збеглага агляду.

<Моцны> Працэс Пераважнае:

Як згадвалася вышэй, аперацыйная сістэма Linux з'яўляецца папераджальнае. Калі працэс пераходзіць у стан TASK_RUNNING, ядро ​​правярае ці яго прыярытэт вышэй, чым прыярытэт працэсу выкананай ў дадзены момант. Калі планавальнік выклікаецца, каб выбраць новы працэс для запуску (меркавана працэсу, які толькі што стаў працаздольным). Акрамя таго, калі квант часу працэсу, дасягае нуля, ён выгружаецца, і планавальнік выклікаецца для выбару новага працэсу.

<Моцны> па планаванні палітыкі ў дзеянні

Разгледзім сістэму з двума запускаюцца задач: тэкставы рэдактар ​​і кадавальнік відэа. Тэкставы рэдактар ​​I/O-не звязана, таму што ён праводзіць амаль увесь свой час чакання націску клавіш карыстальніка (незалежна ад таго, наколькі хутка карыстальніка, гэта не так хутка). Нягледзячы на ​​гэта, калі ён атрымае націск клавішы, карыстальнік чакае, рэдактар ​​неадкладна рэагаваць. З іншага боку, видеокодер працэсар звязаны. Акрамя чытання патоку неапрацаваных дадзеных з дыска, а затым пісаць атрыманае відэа кодэр марнуе увесь свой час прымянення відэакодэка да неапрацаваным дадзеных. Ён не мае якіх-небудзь моцных часовых абмежаванняў адносна таго, калі ён працуе, калі ён пачаў працаваць у цяперашні час або ў паўсекунды, карыстальнік не мог сказаць. Вядома, тым хутчэй ён заканчвае тым лепш.

У гэтай сістэме, планавальнік дае тэкставы рэдактар ​​з больш высокім прыярытэтам і больш, чым квант часу кадавання відэа, паколькі тэкставы рэдактар ​​з'яўляецца інтэрактыўным. Тэкставы рэдактар ​​мае мноства даступнага кванта часу. Акрамя таго, паколькі тэкставы рэдактар ​​мае больш высокі прыярытэт, ён здольны апярэдзіць видеокодер пры неабходнасці. Гэта гарантавала тэкставы рэдактар ​​здольны рэагаваць на ключавым карыстальнік націскае адразу. Гэта ва ўрон видеокодера, а таму, што тэкставы рэдактар ​​працуе толькі перыядычна, видеокодер можа манапалізаваць пакінуты час. Гэта аптымізуе прадукцыйнасць абодвух прыкладанняў.

46
дададзена
Downvoted. Увесь тэкст быў проста скапіяваны з дакументацыі. У будучыні, проста выкарыстоўвайце спасылку на арыгінал.
дададзена аўтар AndroidDev, крыніца
@ Крыс Калі вы думаеце, што я сказаў нешта пра копію пасты (тое, што вы каментавалі мой адказ), то вы памыляецеся. Адказ ужо згадвалася, што сувязь. Я проста паспрабаваў даць яму фокус. Але так, яго бескарысным, так як я не зразумеў пытанне правільна .. Дзякуй!
дададзена аўтар user577898, крыніца
Дзякуй за інфармацыю ... Я прачытаў гэта апісанне ў мінулым, і гэта вялікае апісанне таго, як АНДРОІД вызначае прыярытэт у дачыненні да забойства працэсу і асваення рэсурсаў. Большая частка інфармацыі, мне не хапае касаемо апрацаваць выкананне ... Напрыклад можа фонавы працэс, які круціцца і спажывае вялікую колькасць апрацовак галадаюць ці паўплываць на працэс пярэдняга плана ад бачнай актыўнасці. Мая здагадка складаецца ў тым, што будуць прымяняцца тыя ж правілы, але я стараюся, каб атрымаць больш канчатковага адказу на гэтае пытанне. Дзякуй зноў.
дададзена аўтар Gregg Rivinius, крыніца

Android у гэтых адносінах крыху адрозніваецца ад звычайнай сістэмы Linux. Ёсць дзве рэчы, Android выкарыстоўвае для планавання ўплываюць: працэс/нітка «добры» ўзровень і кантрольных груп.

Працэс "добрыя" наступствы на ўзроўні нармальная «справядлівая» планаванне палітыка ў Linux; ніткі, якія маюць больш высокую ветласць будуць працаваць радзей, чым патокі з больш нізкай ветлівасцю. У сітуацыі, калі ў вас ёсць адзін струмень з прыярытэтам «па змаўчанні» (як вызначана ў Process.THREAD_PRIORITY_DEFAULT ) атрымае запусціць значна часцей, чым тыя, на фоне прыярытэту (або Process.THREAD_PRIORITY_BACKGROUND ).

Тэарэтычна гэта можа пераканацца, што ніткі пярэдняга плана/UI істотна не ўплывае на фоне працы ... Аднак, на практыцы, гэта не з'яўляецца дастатковым. Разгледзім, калі ў вас ёсць 10 фонавых ўсіх жадаючых запускаць тэмы, але адна нітка на пярэднім плане ваджэння карыстацкі інтэрфейс. Гэта ўсё яшчэ можа прывесці да прыкметнага ўздзеяння на паводзіны пярэдняга плана ніткі.

Для вырашэння гэтай праблемы, Android таксама выкарыстоўвае Linux у кантрольных групы простага спосабу стварэння больш строгі пярэдняга плана супраць фону планавання. Пярэдняга плана/па змаўчанні дазваляе планаваць кантрольная група патокаў у звычайным рэжыме. Фон кантрольнай група, аднак прымяняецца абмежаванне толькі каля невялікага працэнта ад агульнай працэсарнага часу быўшы даступныя усе патокаў у гэтай кантрольнай групе. Такім чынам, калі гэты працэнт 5%, а ў вас ёсць 10 фонавых патокаў ўсе хочуць працаваць і адзін паток пярэдняга плана, 10 фонавыя патокі разам могуць прымаць толькі максімум 5% даступных цыклаў цэнтральнага працэсара ад пярэдняга плана. (Вядома, калі няма пярэдняга плана ніткі не хоча працаваць, фонавыя патокі могуць выкарыстоўваць усе даступныя цыклы CPU.)

Android няяўна перамяшчае падшыўкі паміж кантрольнымі групамі па змаўчанні і фону, калі вы выкарыстоўваеце свой публічны API, каб усталяваць прыярытэт патоку. Такім чынам, калі вы ўсталюеце прыярытэт ніткі ў Process.THREAD_PRIORITY_BACKGROUND або больш, вы таксама будзеце пакласці нітку ў фоне кантрольнай групы. Усталюйце яго ў Process.THREAD_PRIORITY_DEFAULT і гэта будзе ў кантрольнай групе па змаўчанні.

З-за гэтага, вынікаючы нармальную ўмоўнасць пакласці фонавыя рабочыя патокі ў фонавым рэжыме прыярытэту вы можаце быць упэўнены, што яны не парушаюць ваш пярэдні план патоку карыстацкага інтэрфейсу.

Акрамя таго, Android будзе таксама перанесьці ўсе патокі ў працэсе на фоне кантрольнай групы для працэсаў, якія ён ведае, не з'яўляюцца крытычна важнымі для карыстальніка. Любы фонавы працэс або працэс абслугоўвання мае свае ніткі пакласці ў даведачнай кантрольную групу, незалежна ад таго, запыталі асобныя ніткі пярэдняга плана прыярытэту планавання.

34
дададзена

Так, гэта можна для працэсу галадалі.

Android uses Linux 2.6 for its low level management of resources. Linux 2.6 happens to use multi-level feedback queues as its scheduling algorithm. This favours I/O bound processes and short CPU burst processes (ideal for phones for responsiveness/interaction). This does however mean that CPU intensive processes and low priority processes risk getting starved. I'm not sure if Linux 2.6 periodically increases the priority of waiting processes so they will eventually get served thereby avoiding starvation.

Рэалістычна, хоць, вам не трэба турбавацца пра гэта, так як вы будзеце альбо быць актыўнай дзейнасці або вы будзеце службы, абодва з якіх маюць адносна высокія прыярытэты, як папярэдні адказ паказвае.

8
дададзена