SW공부 40일차

Guryena·2023년 2월 24일
0

CS

목록 보기
33/34

1. 단일 프로세스와 멀티 프로세스에 대하여 설명하시오.

  • 스레드(Thread)
    스레드는 CPU의 이용의 기본 단위다.
    프로세스 내에서 프로그램 명령을 실행하는 기본 단위이자 흐름, 개체라고 할 수 있다.
    스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 으로 구성된다.
    스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.

    프로세스에 하나의 제어 모델이 있으면 단일 스레드이며,
    프로세스가 다수의 제어 스레드를 가진다면 다중 스레드 모델이다.

  • 단일 스레드

    하나의 프로세스에서 하나의 스레드 실행
    하나의 레지스터와 스택으로 표현

  • 멀티 스레드

    프로그램을 다수의 실행 단위로 나누어 실행
    프로세스 내에서 자원을 공유하여 자원생성과 관리의 중복을 최소화
    서버가 많은 요청을 효율적으로 수행할 수 있는 환경을 제공
    각각의 스레드가 고유의 레지스터와 스택으로 표현됨

2. 프로세스와 쓰레드의 차이는?

  • 프로그램(Program)
    사전적 의미
    “어떤 작업을 위해 실행할 수 있는 파일”

  • 프로세스(Process) 란

    • 사전적 의미
      “컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램”
      메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
      운영체제로부터 시스템 자원을 할당받는 작업의 단위
      즉, 동적인 개념으로는 실행된 프로그램을 의미한다.
    • 할당받는 시스템 자원의 예
      CPU 시간
      운영되기 위해 필요한 주소 공간
      Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

      프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
      기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
      각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
      한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
      Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용
  • 스레드(Thread)

    • 사전적 의미
      “프로세스 내에서 실행되는 여러 흐름의 단위”
      프로세스의 특정한 수행 경로
      프로세스가 할당받은 자원을 이용하는 실행의 단위
    • 특징
      스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
      스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
      같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
      각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
      한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

3.아래의 가로 찍기와 세로찍기를 쓰레드로 돌리시오.

	for(int i=0; i < 300; i++)
		System.out.printf("%s", new String("-"));		

	
	for(int i=0; i < 300; i++) 
		System.out.printf("%s", new String("|"));	
public class MultyTreadTest {

	public static void main(String[] args) {
		MyThread1 th1 = new MyThread1();
		MyThread2 th2 = new MyThread2();
										//Never direct run in Thread because 'th1.run();' is single thread
										//th1.run();
		th1.run();
		th2.run();
//		th1.start();
//		th2.start();
		
		System.out.println("mian end");
	}

}

class MyThread1 extends Thread {

	@Override
	public void run() {
		for (int i = 0; i < 300; i++) {
			System.out.println(i + "a");
		}
	}
}

class MyThread2 extends Thread {

	@Override
	public void run() {
		for (int i = 0; i < 300; i++) {
			System.out.println(i + "b");
		}
	}
}

4. 아래의 의미를 설명해 보시오.

메인 스레드가 종료되더라도 실행 중인 스레드가 하나라도 있다면 프로세스는 종료되지 않습니다.

자바의 모든 애플리케이션은 메인 스레드(main thread)가 main() 메소드를 실행하면서 시작한다. 메인 스레드는 main() 메소드의 첫 코드부터 아래로 순차적으로 실행하고, main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행이 종료된다.

메인 스레드는 필요에 따라 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있다. 즉, 멀티 스레드를 생성해서 멀티 태스킹을 수행한다.

싱글 스레드 애플리케이션에서는 메인 스레드가 종료하면 프로세스도 종료된다. 하지만 멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다. 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않는다.

5. 학생마다 Student 객체를 생성하고 4명의 학생 정보를ArrayList 컬렉션에 저장한 후에, ArrayList의 모든 학생(4명) 정보를 출력하고 학생 이름을 입력 받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.

학생 이름, 학과, 학번, 학점평균 입력하세요.

황기태, 모바일, 1, 4.1
이재문, 안드로이드, 2, 3.9
김남윤, 웹공학, 3, 3.5

최찬미, 빅데이터, 4, 4.25

이름: 황기태
학과: 모바일
학번: 1

학점평균: 4.1

이름: 이재문
학과: 안드로이드
학번: 2

학점평균: 3.9

이름: 김남윤
학과: 웹공학
학번: 3

학점평균: 3.5

이름: 최찬미
학과: 빅데이터
학번: 4

학점평균: 4.25

학생 이름 >> 최찬미
최찬미, 빅데이터, 4, 4.25
학생 이름 >> 이재문
이재문, 안드로이드, 2, 3.9
학생 이름 >> 그만

0개의 댓글