블로그 이미지
kalstein

여러가지 프로그래밍 관련이나...신변잡기적인 글들을 남기는 블로그입니다. 지식은 나누는만큼 강력해집니다 ^^

Rss feed Tistory
잡동사니 2010. 9. 13. 13:26

iOS4가 Multitasking이 안된다고?

어제 인터넷서핑중에...저렇게 주장하는 사람들이 제법 있음을 알았다.
아이폰유저이긴하지만 애플빠도 아니고,(애플빠였으면...아이맥 등도 구매했겠지) 그렇다고 안드로이드 진영을 까지도 않지만, (안드로이드 자체를 깐적은 단 한번도 없다. 단지 안드로이드 진영의 한계점만 언급할뿐) 무작정 어설픈 지식으로, iOS자체를 까는건 뭐랄까. 컴퓨터 공학을 전공한 자로써 잘못된 지식이 전파 되는것 같아서 한 글 남겨본다... (그래. 나 발끈했다 -_-)


일단 까는 사람들 내용은 이랬다.
1. iOS의 멀티태스킹은 언론플레이다. 실질적으로는 제대로 지원도 못한다.
2. 어플이 멀티태스킹에 대비해서 프로그래밍을 해야된다는게 말이나 되나.
3. 그나마 멀티태스킹이라고 하는 수준은 DOS 수준밖에 안된다.

쩝... 이게 참 말이나 되는건지. ㅋㅋㅋ
일단 용어 정리부터 해보자. 멀티태스킹이란 뭘까.
간단히 우리가 PC사용할 때 보면, 음악, 메신져를 켜두고, 웹페이지도 열어놓고, 게임도하고. 이런거다.
그리고 전문용어 하나 정리하자면 "context switching"
뭐 정확하게 하자면, task가 전환될때 CPU내의 register를 각 stack에 백업을하고 어쩌고저쩌고...지만,
그냥 간략히 말하자면, 인터넷 쓰다가 창을 최소화 시켰다가, 나중에 복원해도 똑같은 페이지가 보이는것.
그정도로 하자.

하나더. 스마트폰 사용중에, 멀티태스킹이란 어떤걸까.
음악(ipod던, 소리바다던 벅스던 기타등등)을 켜두고, 웹페이지를 볼수 있고,
그 와중에 메신져에서 친구가 메세지 보내주면 그에 대해 답해주고.
대부분의 경우가 이거다 그치? (딴 시나리오 얼마든지 추가하시라~)

자, 1,2,3 을 반박해보도록 하자.



1. iOS의 멀티태스킹은 언론플레이다. 실질적으로는 제대로 지원도 못한다.

솔직히 iOS3의 멀티태스킹은 좀 거시기하긴하다. 무조건 어플을 껐다가 키면 초기상태로 빠진다.
위에서 언급했던 "context switching"이 제대로 안된달까?
반면 iOS4 부터는 좀 다르다. 어플을 껐다 켜면 아까 껐던 상태 그대로 켜진다.
위에서 말했던 스마트폰 사용중 멀티태스킹 상황을 지원못하는가?
당연히 지원한다. 일단 크게 광고했던 멀티태스킹 기능은 스트리밍 음악 서비스와, GPS 기능이다.
이를 통해, 네비게이션, 음악 듣기 등이 멀티로 가능하다.


2. 어플이 멀티태스킹에 대비해서 프로그래밍을 해야된다는게 말이나 되나.

스마트 폰인데도 불구하고, PC 상황과 동일하게 동작하는걸 원한다.
즉, 음악파일을 플레이하면 플레이하는거지 왜 백그라운드에서 동작하는 다른 API가 있냐는거다.
안드로이드는 다 잘 되는데 왜 iOS만 그렇냐는거다.

스마트폰은 PC환경과 조금은 다르다. 어차피 유저는 화면에 띄워져있는 것에 집중하고있고,
백그라운드로 CPU를 왕창쓰는 어플이 돌아가야 할 이유도 없다.
(Seti@Home 을 스마트폰에서 띄우고 쓰실 분 계신가? MP3 Encoding을 하실건가?)
멀티태스킹은, GPS나 음악 스트리밍 서비스 정도만 해도 충분하다.
더 필요한게 있으면 다음 버젼 iOS SDK 에 추가가 되겠지.
어플 개발자가 멀티태스킹으로 돌아야된다고 판단되면 해당 API를 쓰라는거다.
이게 뭔가 논리 배반적인가?

보다 기술적인 얘기로 들어가자면, 보통 OS의 task는 3가지 상태를 가진다.
Ready, Suspend, Running.
Running은 말 그대로 지금 돌아가고 있는 녀석.
Ready는 Running 할 준비가 된 녀석.
Suspend는 지금 돌 필요가 없는 녀석.

iOS에서는 지금 유저가 사용중인 단 하나의 어플만 Running으로 보면 된다.
다른 어플로 전환하거나, 홈버튼으로 어플을 나가버리면 원래 있던 어플을 Suspend로 바꾼다.
단, 멀티태스킹 API를 사용 하는 녀석들은 계속 Ready <-> Running 상태를 유지할것이다.
그래서 실제로 백그라운드 음악틀기,GPS잡기가 될꺼니까.
Suspend로 가는 녀석들은 아예 신경을 안써도 되는 구조이다.

유저가 수많은 어플을 껐다가 켰다가 할것인데,
그 모든 어플들을 계속 Ready <-> Running 상태를 유지하는게 옳은가, Suspend로 치부해서 신경끄는게 옳은가?
휴대폰 배터리가 무한이 아닌 다음에는 당연히 후자가 낫다.
뭐...아무것도 안하는 어플이 배터리를 소모하는게 맞다면;;; 할말은 없다 ㅡ.ㅡ;;;


3. 그나마 멀티태스킹이라고 하는 수준은 DOS 수준밖에 안된다.

DOS상에서의 램 상주 프로그램이 가능했던 점에 비추어서, 저런 말을 하는 사람도 있었다.

위키에서 램 상주 프로그램에 대한 설명.
============================================================
램 상주 프로그램(TSR, Terminate and Stay Resident)은 도스 운영 체제 상에서 제한된 멀티태스킹을 가능하게 하는 하나의 방법이었다. 수많은 하드웨어 드라이버 프로그램들은 TSR의 형태를 취했으며, 여러 유틸리티와 바이러스들이 이러한 형태를 취하기도 했다.

MS-DOS에서는 한 번에 오직 하나의 프로그램만 실행될 수 있으며, 종료될 때는 보통 시스템 호출 INT 21h/4Ch를 호출하여 기본 셸 프로그램인 COMMAND.COM에게 제어권을 돌려 주었다. 이렇게 종료할 경우 프로그램이 사용하고 있던 메모리와 자원들은 모두 초기화되지만, INT 21h/31h를 호출하여 종료할 경우 프로그램의 일부가 램에 계속 남기 때문에 이를 통해 램 상주 프로그램이 구현되었다.
============================================================

DOS는 멀티태스킹 자체를 고려하지않은 OS이다.
그래서 어쩔수없이 2개의 프로그램을 굴리기 위해 저런식으로 썼는데,
그것과 iOS의 멀티태스킹이 비슷하다는 거다. -_-;;
뭐 사용자가 얼핏 봤을때 비슷할 수도 있다.
그런데 중요한 점은 DOS 상황에서 해당 어플이 무한루프가 빠지거나, 잘못된 연산으로 죽는경우,
OS 자체가 죽어버린다. 재부팅 말고는 해결책이 없다.

iPhone을 쓰다가 간혹 어플이 지혼자 죽어버리는 경험 해보셨을것이다.
어플의 버그로 어플이 비정상종료된 상태이다.
이때 스마트폰 자체가 죽던가? 아니면 어플만 종료되던가?
이게 DOS 정도의 OS인가??
(선점형 Kernel이냐 비선점형 Kernel이냐를 따지시는 분들은 저리로 훠이훠이~
지금은 단순히 user space만을 논하고 있다.)


이상 반론 끝.
참 뻘글을 남겼을 수도 있지만, 저런 이상한 말을 듣고는 바로 질문 하는 사람들 있었다.
'iPhone 멀티태스킹 안되나봐요? 그럼 음악 들으면서 웹서핑 안되겠네요...'
이런게 문제다. -_-

정확히 알지 못하고 정확히 표현하지 못할꺼면 말을 하지말던가...
  • ios 개발자 2011.06.15 18:37 ADDR 수정/삭제 답글

    ios4가 멀티테스킹을 지원한다고 보기엔 좀 그렇죠.
    애플만의 철학으로 백그라운드 작업을 10분밖에 허용하지 않고 있습니다.
    voip location audio 세 작업만 10분뒤 추가적인 코딩으로 가능하게 하고요.
    voip 같은 경우는 10분마다 새로운 신호를 서버에서 쏴줘야 백그라운드에서 그대로 머물러줍니다.
    이렇게 만든게 애플의 철학이 담겨서 (사용하지 않는 어플이 백그라운드로 많이 남겨져있으면 좋을 게 없으니) 일지는 몰라도 백그라운드 작업이 필요한 어플을 제작하는게 너무 힘들죠.
    장점이자 단점이 될 수 있는데 개방적인 안드로이드와 비교했을 때 장점보단 단점이 더 크다고 느껴짐...

  • ios 개발자 2011.06.15 18:40 ADDR 수정/삭제 답글

    솔직히 말해서 10분 멀티태스킹은 멀티태스킹이라고 보기 보다는 그냥 10분간 살려놓는다는 표현이 맞죠. 추가작업이 많이 필요하고 또 완성한다고 해서 앱스토어에서 내놓기도 힘들고

    • kalstein 2011.06.16 01:18 신고 수정/삭제

      인터넷 서핑중에... 좀 어이없게도 옛날지식으로 잘못된 정보를 전파하는걸 봐서 욱한김에 쓴글입니다 ㅋ

      뭐 사실...제약은 많겠죠. 멀티태스킹에 대한 policy를 좀 안드로이드측에 비해 빡빡하게 두긴하는듯. 근데 10분만 되나요? 그름...;; 네비게이션 어플의 경우, 백그라운드로 10분이상 돌려버리면 어플강제종료??

잡동사니 2009. 11. 25. 19:55

삼성에서 iPhone 에 대항하는 모델...가능할까.

정말 오랜만의 포스팅. 요즘 엄청난 화두가 되고있는 아이폰 얘기를 해볼까한다.

일단 아이폰 개발 뒷얘기부터...
http://monsterdesign.tistory.com/578

보면서 살짝 소름이 돋았었다. 멋지달까. 흠...개발자의 애환도 느껴지면서...(ㅠ.ㅠ)
여튼 중요한건 이게 아니고, 제목으로 돌아가보자.
정말 가능할까???

내 예상대답은...'당분간은 NO'이다.

안드로이드가 나오기전까지는 어림도 없다.
안드로이드 폰이 나와도 문제다. 과연 감성적으로 매력발산이 가능할것인가?
현재 같은 WindowsMobile 6.5를 쓰는 HTC사의 HD2 모델에게도 점유율은 밀린다.
(전체 스마트폰의 10%정도를 차지하는 WM시장인데도 말이다 -_-)
안드로이드에서도 과연 얼마나 터치감에 중시해서 튜닝을 할 것인가? 가 문제다.

예전 햅틱이 나왔을때처럼...'2주만에 만드느라 고생했어요' 이런거...참 부끄럽다;;;
그럴일 없기를 간절히 바랄뿐.

풀터치폰의 기본기. 터치에 정말 중점을 둔 국내 폰이 언제쯤 나오려나...
뭐. 기본기를 다지는...시작점부터 다 말하자면 너무 길어지니 그냥 여기까지만 해야지 -_-;
  • 냐궁 2010.01.05 11:32 ADDR 수정/삭제 답글

    터치가 싫은 1人...-0-; 큰화면은 부럽..-.-

TOTAL 38,593 TODAY 3