티스토리 뷰
매일 어렴풋이만 알고 있던 Process와 Thread를 정리해보자고!
개인적으로 공부하고 있는 부분이라
정확하지 않은 부분이 있어!!!!
그럴 시, 니말이 다 맞음~
Thread란?
사실 이 전 직종에서는 쓰레드는 그저 실이다 실
컴퓨터 공학 내에서 작업을 얘기하는거니까
실이 어떤 의미로 쓰일지는 대~~~충 감은 온다
하지만 그전에 Process가 뭔지 알아야한다 ^^
Process란?
일상적으로 자주 사용하는 말이다.
이 업무는 요딴 프로세스로 진행되는거여~
그래서 컴퓨터 공학에서의 프로세스는 뭔데?
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다.
더 쉽게 말하자면, 지금 실행중인 프로그램!
프로그램을 실행시키려면 프로그램이 컴퓨터에서 메모리를 할당 받아야 하는데,
그걸 가리켜서 자원을 할당받는 다고 하는거지
(메모리에는 코드, 데이터, 스택, 힙 뭐 이런 것들이 있다는데
이건 다음 장에서 자세히 다뤄보자
stack은 자료 구조에서 한 번 보긴 했어 후후)
만약 프로그램 자체가 매우 복잡해서 프로세스 하나만으로는 감당이 안될 때가 있다고 가정하자.
그럼 그런 생각을 할 수 있겠지?
"아니 그럼 프로세스 여러개를 하나의 프로그램으로 만들 순 없는거임?"
있습니다 ㅠㅠㅠㅠㅠ 네네 있습니다. 그거시 멀티프로세스 입니다...ㅠㅠ
잘은 모르겠지만 IPC(Inter-Process Communication)이나 LPC(Local-Inter-Process Communication)을 사용하거나
프로세스끼리 공유 가능한 메모리를 별도로 만들어줘야 한다고 한다...ㅎㅎ
아무턴 복잡하다!!!!
또 하나의 단점이라면, 자원은 한 프로세스 들렀다가 다른 프로세스 들렀다가 하는 식으로 진행되기 때문에
공유되는 프로세스라면 서로의 상태를 공유해야한다.
상태는 Context라고 하는데, 공유를 위해 서로 계속 Context를 바꿔줘야 하므로
Swiching 하는데 드는 시간이 필요하다
시간 = 비용..
일단은 프로세스끼리의 공유는 복잡하다!
장점이라면, 프로세스끼리 하나의 프로그램을 돌리기 때문에 하나의 프로세스가 오류나도
프로그램 자체는 종료되지 않는다
왜냐면 애초에 프로세스는 자원을 공유하지 않크든요
이 쯤에서 힘차게 등장해주시는 Thread!
Thread는 프로세스 하나로는 감당이 안되는데, 멀티프로세스러 진행하긴 시간이 많이드니
프로세스 내부를 작업 단위로 잘게 쪼갠거야
조금 학술적으로다가 얘기해보자면,
스레드는 할당 받은 자원을 이용하는 실행의 단위
자 보자고, 프로세스는 이미 자원을 할당 받은 상태니까 일단 자원이랑 코드가 뭉쳐진 덩어리 라고 가정하자
그리고 스레드는 그 덩어리 내부에 존재하는 작업단위의 흐름들이니 자원을 나눠 쓸 수 있는 코드라는 거지!
예컨데, 프로세스가 main이라면 스레드는 function 쯤으로 정의 할 수 있겠다
조금 더 자세하게 말하자면 아래와 같다.
운영체제가 프로그램에 각각 CODE, DATA, STACK, HEAP을 할당해주었고, 할당 받음으로써 프로세스화 됐다!
그리고 프로세스 내 스레드는 할당된 자원을 공유하는데, CODE/DATA/HEAP은 프로그램에 할당된 것을 공유하고,
STACK은 할당된 부분에서 스레드가 각각 떼다가 사용헌다
스레드는 한 프로세스 내부에 있고, 한 프로그램을 작동하기 위해 복잡한 작업을 나눠둔 것이다.
가끔 무슨 시스템 오류 창 뜨면서 프로그램 종료가 되는 경우가 있는데 고걸 생각하면 되겠다
물론 걔가 멀티프로세스일 가능성도 있..ㄱ겠고나...ㅎㅎ
"어? 근데 웃기네 왜 스레드 오류인데 프로세스가 난리..?"
운영체제 입장에서는 최소단위가 프로세스이기 때문이쥐~
스레드에는 두 종류가 있다
싱글 스레드 : 말그대로 프로세스 내 단 하나의 스레드가 존재하고 걔 혼자 다 처리!
멀티 스레드 : 프로세스 내 여러개의 스레드가 존재하고, 나누어 처리하되, STACK을 제외한 나머지 자원 공유!
멀티스레드를 통해 프로세스를 처리하게 되면,
Context 스위칭 하는데 시간이 안드니 훨씬 경제적이지!
단점이라면, 멀티스레드 중 하나의 스레드 잘못되면 전체 프로세스 안뇽
자원을 공유중이기 때문에 하나의 스레드에서 변형된 어떤 자원을
다른 스레드에서 사용하지 못하게 될 경우도 있고 그렇다는 말썸!
이걸 보고 동기화 문제라고 하드라고
이 동기화 문제 없이 프로세스를 처리할 수 있는 멀티스레드를 Thread Safe한 경우라고 할 수 있다네
각각의 스레드가 지역변수만을 사용한다거나 하면 문제가 없지 않을까..?
아니면 계속적으로 동기화 시켜준다거나
좀 더 공부해야혀...
결론
프로그램 : 저장장치에 저장된, 메모리 할당 안된, 정적 상태의 파일
프로세스 : 메모리 할당 받아 실행중인 프로세스
스레드 : 프로세스 내 자원을 공유하는 실행 단위
멀티프로세스 : 하나의 프로그램을 작동시키기 위해 여러 개의 프로세스 이용하는 것
장점 - 프로세스 하나 오류 생겨도 전체 프로그램이 종료되지는 않는다
단점 - Context Switching에 비용이 든다 (상태 전달)
멀티스레드 : 하나의 프로그램을 작동시키기 위해 하나의 프로세스 내에서 스레드라는 단위로 쪼개놓은 것
부여된 자원은 공유 가능하나 Stack만큼은 각자 할당량이 있다
장점 - Context Switching비용 음슴,
단점 - 스레드 하나 오류시 전체 프로세스 종료, 자원 공유되므로 발생하는 동기화 문제
'(기초)그래서 뭘 배운거야? > Java' 카테고리의 다른 글
JV-95-String과 char의 차이 (0) | 2022.04.01 |
---|---|
JV-93-String / StringBuffer / StringBuilder (0) | 2022.03.28 |
JV-92-자료구조 (0) | 2022.03.23 |
- Total
- Today
- Yesterday
- ul>li
- 2021년42회
- 93점
- definition List
- br tag
- emtag
- 정처기
- 합격
- marktag
- 정보처리기사필기
- ol>li
- html
- 단락태그
- hn태그
- 긴문장
- usemap
- 비전공
- 복습
- 정보처리기사실기
- tablespan
- boldtag
- tabletag
- hr tag
- 줄글
- spantag
- imgtag
- 2021년2회
- 정보처리기사
- ptag
- pretag
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |