-
Process,Task,ThreadComputer Science 2021. 5. 23. 17:32
프로세스
부모 프로세스 -자식 프로세스 관계로 존재한다
부모 프로세스에서 fork로 자식 프로세스를 만든다.
프로세스는 최소하나의 스레드로 구성된다.
프로세스는 독립적이므로 프로세스간에 메모리 자원(code, data, heap, stack)을 공유하지 않는다.
프로세스끼리는 IPC(inter process communication)을 통해 통신
멀티 프로세스?
메모리 자원을 공유하지 않으므로 프로세스 전환시 context switching시간이 길다.
한 어플리케이션(한 프로그램)에서 여러개의 프로세스로 나눠서 사용하는 것?
하나의 프로세스가 죽더라도 프로세스 간에는 메모리 자원을 공유하지 않으므로
다른 프로세스에 영향을 주지 않아 안정성이 높다.
메모리 자원을 공유하지 않는대신 프로세스를 만들 때 마다 메모리 자원을 복사해서 새로 만들기 때문에
메모리 공간을 많이 차지하는 단점, 그만큼 많은 따로만들어진 각각의 큰 메모리에 대해 contextswitching시간이 늘어나므로 cpu시간을 많이 차지한다. (Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다)
안드로이드 어플리케이션이 꼭 하나의 프로세스만 사용할 수 있는 것이 아니다.
프로세스를 추가할 수 있다.( 스레드보다 프로세스를 꼭 써야하는 상황이거나 더 유용할 때 쓰는 것 같다.)
멀티 프로세싱?
블로그마다 멀티 프로세스와 멀티 프로세싱의 설명이 서로 다르다...모르겠다.
싱글 코어가 아닌경우 하나의 프로세스에 대하여 여러개의 코어가 협력적으로 처리하는 것으로 설명하는 곳도 있고
멀티 프로세싱을 위의 멀티프로세스로 설명해놓은 곳도있다.
멀티 태스킹
태스크를 프로세스의 확장으로 본다고 하는데 이 태스크 개념이 완벽하게 와닿지는 않는다.
프로세스를 최적의 상태로 스케쥴링하여 적절한 상태로 실행하는 것인것 같다.
멀티 프로그래밍
디스크에서 메모리로 데이터를 로딩 시키거나 반대로 메모리에서 디스크로 데이터를 저장시키는 시간은
cpu의 연산속도보다 많이 느리다. 이럴 경우 cpu는 놀고있는데 이 놀고있는 시점에서 어떤 프로세스일을 할 것인지 결정하는 것
스레드
프로세스 하나 안에서 나뉘는 단위
스레드끼리는 프로세스의 메모리자원 code, data, heap 를 공유하고 stack만 따로 생성된다.
멀티 스레드
하나의 프로세스에서 여러 스레드를 사용하는 것
멀티 스레딩
스레드간에 프로세스의 메모리 자원중 공유하는 자원들이 많아 context switching시간이 짧은 장점이 있다.
스레드간 동기화 문제가 크다. 동기화 문제나 하나의 스레드 장애로 전체 스레드가 종료될 위험이 크다.
프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업간 통신 부담이 줄어든다.
별개의 기능을 하면 프로세스로 구성, 관련된 기능이 많으면 스레드로 구성하는 것이 이득
매일 미뤄놓고 프레임워크만 쓰다가 이제 정말 여러 신기술이나 네트워크 공부의 필요로 인해 공부를 꼭 해야겠다.
스레드 동기,비동기 공부할 것
예전에 읽었었던 context switching의 동작 , 페이지 테이블?(메모리 나눠서 기록)관리 더 공부하기
멀티 태스킹과 멀티 프로세싱의 차이
안드로이드에서의 태스크는 intent를 통해 액티비티를 어떻게 만들것인가를 통해 어렴풋한 수준...
cs를 더 알아야 할 것 같다.
옛날에 배웠던 컴퓨터 구조의 레지스터와 주소공간 등등 어떻게 동작되는지......