유용한 팁

[프로그래밍] 프로세스와 스레드

프리월드 2012. 9. 6. 16:03

http://blog.naver.com/elecengine?Redirect=Log&logNo=80048364012

http://ask.nate.com/knote/view.html?num=3557610

http://blog.naver.com/jsj776655?Redirect=Log&logNo=60163128190


프로세스(Process)


컴퓨터 내에서 실행중인 프로그램, 할당받은 자신만의 자원을 가지고,

CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재.

코드(Code),데이터(Data),힙(Heap),스택(Stack)


스레드(Thread)


실제적으로 명령어가 CPU를 사용하여 실행되어지는 객체의 단위.

하나의 프로세스에서 여러개의 스레드가 실행될 수 있으면 최초에 프로세스가 생성될때 메인 스레드가 생성, 이러한 스레드는 같은 프로세스에 있는 자원과 상태를 공유.(코드, 데이터, 힙의 영역을 프로세스와 공유하면서 오직 프로그램 카운터, 레지스터, 스택을 스레드별로 갖게 된다.)


차이점 : 


프로세스는 독립적으로 실행되며 별개의 메모리 영역을 차지,

스레드는 프로세스 내의 메모리를 공유해 사용할 수 있으며 프로세스 간

전환 속도보다는 스레드 간 전환 속도가 더 빠르다.


종류


메인 스레드 : 프로세스의 메인 함수로서 실행되는 스레드

일반 스레드 : 메인 스레드로부터 생성된 스레드나 스레드에서 새로 생성된 스레드


스레드 생명주기


개발자의 개발영역 : 개발자들이 직접 구현하거나 실행시켜야 하는 메서드들로 구성

안드로이드의 시스템 영역 : 안드로이드 시스템 내부 스케쥴에 따라 자동 실행되는 메서드들로 구성




new : 스레드 생명 주기의 시작으로 인스턴스는 만들어졌으나 start()되지 않은 상태를 말한다

Runnable : start()매서드 호출에 의해 스레드는 Runnable 상태로 이동한다.

Running : 스케줄러는 Runnable 풀(pool)을 체크하고 스레드는 Running상태로 이동시킨다. 이때 개발자가 작성한 run()메서드가 호출된다.

Bolcking : Sleep매서드, Wait 매서드,I/O 입출력 요청(request), 수행시 블록(Blocking) 상태로 이동한다.

Dead : Run()이 완료되면 자연스럽게 스레드는 종료된다. 이상태에서 다시 시작되는 것은 불가능하다.


스레드 동기화


동기화란?

하나의 자원(resource)을 여러 스레드가 사용할 때 한 시점에서 하나의 스레드만 허용하는 기능



'유용한 팁' 카테고리의 다른 글

[스크랩]GPL/LGPL/MPL/BSD 라이선스  (0) 2012.09.19
오버로딩과 오버라이딩  (0) 2012.09.17
XML, JSON, BSON, MSGPACK 장,단점 비교  (0) 2012.09.05
[JAVA]HashMap  (0) 2012.09.05
[A* 알고리즘을 사용한 길찾기]  (0) 2012.09.05