study/java
16_java_쓰레드(Thread)_사전지식, 왜?
스파이크12
2022. 1. 7. 12:59
○ 프로세스
OS가 실행시키는 프로그램은 보조기억장치에 있음
OS가 프로그램을 실행시킬때 메모리에 load하게 되고
그때부터 동작중인 프로그램을 프로세스라 명칭함
○ 멀티태스킹, 멀티프로세스
여러개의 프로세스가 동시(실제로는 시분활로 자원을 분배하여 순회하면서 동작하여
동시에 동작하는것 처럼 느껴지게 함)에 동작한다.
○ Context Switching
멀티태스킹 중 각 프로세스가 어디까지 진행됬는지 context객체에 저장하고 하고
다음 프로세스로 넘기는 작업
○ 동기, 비동기?
동기 : 흐름하나로 순서대로 작업이 끝나고 실행되는 방식
비동기 : 순서에 상관없이 개발적으로 작업이 진행되는 방식
○ Thread가 등장하기전 상황(ex 웹)
프로그램 중 시간이 오래 걸릴거 같은 작업은 다른 프로그램으로
만들어 프로세스를 올리는 방식으로 비동기를 구현함 (fork()함수사용)
이러한 방식으로 부모 프로세스, 자식 프로세스가 생김
이렇게 진행하면 특정 프로세스가 한정된 자원을 독차지 하여 형평성에 맞지 않음
1. 프로세스간에 형평성을 맞추자
2. 빈번하게 일어나는 컨텍스트 스위칭을 시간(자원낭비)을 줄여보자
3. 부모프로세스와 자식프로세스간의 메모리 및 자원 공유를 원활하게 해보자
-> 프로세스 스위칭을 대신할 수 있는 대안이 필요
○ Thread 정의
자원(시간)을 할당받은 프로세스안에서 경량화된 Context Switching을 통해
더 작게 자원을 나눠쓸수 있는 단위