Thread, Process 질문

Yong-hyun Kim·2021년 11월 27일
0

Thread와 Process의 차이는?

  1. 프로세스란
  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
  • OS로부터 시스템 자원을 할당받는 작업의 단위
  • 즉 실행된 프로그램을 의미
  • 프로세스는 가각 독립된 메모리영역(code, data, stack, heap)을 할당받음
  1. thread란
  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • thread는 스택영역에 생성되기 때문에 heap영역에 있는 데이터는 공유가능하다.
  1. Context switching 이란?
  • 현재 실행하고 있는 process나 thread의 상태를 저장하고 다음 진행할 process나 thread의 상태값을 읽어 적용하는 과정
  • 사용자 관점에서 여러 프로세스들이 동시에 실행되는것처럼 보이게 하는것이 문맥교환입니다.
  1. Thread 를 쓰는 이유는? 장점?
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 수행 능력을 올리는 것
  • 하나의 프로그램에서 동시에 여러 개의 일을 수행할 수 있도록 한다
  • 프로그램의 일부분이 중단되어도 프로그램은 지속되기에 사용자에게 응답성을 높이는 장점이 있다.
  • 프로세스 내의 자원들을 공유하기 때문에 시스템 자원 소모가 줄어든다.

4.1 thread의 단점

  • 공유된 자원에 레이스컨디션으로 동기화 이슈가 발생할 수 있다.
  • 또한 동기화를 위해 lock을 무분별하게 사용하는 경우 병목이 발생할 수 있다.
  • 또한 싱글코어 스레드에서는 초기 멀티스레드보다 스레드 생성에 대한 오버헤드가 적기 때문에 좋은 성능을 발휘할 수 있다.
  1. 스레드 개수가 CPU코어 개수보다 많아지면 어떤 일이 벌어지는지 설명 가능?

===============================================
6. Runnable interface란?
thread를 사용가능하게 하는 인터페이스 입니다. 대표적으로
Thread클래스와 Runnable클래스가 있는데 둘의 차이점은 상속과 구현입니다. 자바에서는 다중상속을 지원하지 않기 때문에 Runnable인터페이스를 구현하는 것이 더 바람직하다.

상속관계가 구현보다는 큰 결합도를 가지고 있어 유지보수에 더 큰 비용이 들기 때문이다.

ex) 상속관계에 상위클래스의 메서드를 재사용 관점으로 사용했다면, 해당메서드 수정 요구사항에 상위 클래스 뿐 아니라 사용하는 모든 하위 클래스의 영향도를 파악해야함 하지만 인터페이스 구현은 각각 개별적으로 사용하기에 해당 메서드만 수정가능함.

6.1. synchronized 키워드를 달면 어떤 일이 생기는지? (amount += value; 연산에 대한 설명)

  • synchoronized 키워드를 통해 특정 연산에 대해 원자성을 보장한다는 의미이다.
  • 동시성 이슈가 있는 환경에서 특정 스레드가 해당 영역을 실행할 때, lock을 걸어서 다른 스레드와의 레이스컨디션 상황을 만들지 않으므로써 원자적인 계산을 가능하게 한다.
  1. InputStream, OutputStream 에 대한 설명
  • 먼저 Stream이란 단일 방향으로 연속적으로 흘러가는것을 의미, 데이터는 출발지에서 시작해 도착지로 흘러간다는 개념
  • InputStream: 데이터를 입력받을 때,
  • OutputStream: 데이터를 출력 할 때
  1. Java Serialize, Deserialize 에 대한 설명
  • 직렬화란 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte형태로 변환하는 기술
  • JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
  • 역직렬화란 byte로 변환된 데이터를 원래대로 Object나 Data로 변환하는 기술
  • 일반적으로 서블릿 세션, 캐시 라이브러리을 사용할 때 사용도비니다.
  • 세션을 파일로 저장하거나 세션 클러스터링, DB 저장하는 옵션을 선택하면 세션이 직렬화가 되어 저장됩니다.
  1. TCP 와 UDP 통신의 특성에 대한 설명
    • TCP와 UDP는 둘다 transport layer에서 데이터를 보내기 위해 사용하는 프로토콜 입니다.
      TCP는 연결형 서비스로 가상 회선 방식을 제공하고, 높은 신뢰성을 보장하고 흐름 제어 및 혼잡 제어 기능을 제공합니다.
      UDP는 비연결형 서비스로 데이터그램 방식을 제공하고, 패킷에 순서 부여나 재조립등의 기능을 처리하지 않기 때문에 연속성이 중요한 서비스에 사용됩니다.

TCP(Transmission Control Protocol)란

  • 데이터를 메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
  • 패킷에 목적지와 송신지 정보를 헤더에 넣고 데이터를 보내기 전 하나의 회선으로 가도록 설정
  • 수신측에서는 송신측에서 보내는 데이터 패킷에 순서를 보장함
  • connection 할때는 3-way handshaking, close시에는 4-way handshaking을 사용
  • UDP방식보다 속도가 느리다.

UDP(User Datagram Protocol)란

  • 보내는 데이터를 Datagram 단위로 처리하는 프로토콜
  • 연결을 위해 논리적인 경로가 없고 각 독립적으로 송신지로 전달
  • 정보를 주고 받을 때, 사전 작업이 없음.
  • 신뢰성보다는 연속성이 중요한 서비스에 적합ex) 실시간 Streaming 서비스

3-Way Handshaing, 4-Way Handshaing

3-Way

  1. client는 server로 SYN(Synchronize Sequence numbers) 전송하고 SYN/ACK 을 받을 waiting 상태가 됨
  2. server는 SYN/ACK을 client로 전송하고 ACK을 받을 waiting상태가 됨.
  3. client는 서버로 ACK을 전송하면서 connect됨.

4-Way

1.client 측에서 종료를 하겠다는 FIN 플래그를 전송
2. server는 client측에 ack을 보내고 자신의 통신이 끝날때까지 기다리는 상태가 됨.
3. 연결 종료가 준비가 되면 client에 FIN 플래그 전송
4. client는 ack을 server로 전송하면서 연결을 종료한다.

  1. 공개키 암호화 방식에 대한 설명
  • 서로 통신을 주고받을 A,B는 각각의 공개키와 개인키를 가지고 있다. A가 plain text를 전달하는 방법에 대해 설명
  1. 각각의 공개키는 서로 알 수 있다.
  2. A는 B의 공개키로 평문을 암호화 한다.
  3. 암호화된 평문은 탈취를 당하더라도 B가 가지고 있는 개인키로만 복호화가 가능하기 때문에 보안에 안전하다.
  4. 암호화된 평문을 B로 전달
  5. B는 본인의 개인키를 이용해 복호화 후 텍스트를 읽는다.
  1. Java 7, 8 의 간략한 특징 설명 (but, Java8 은 책 한권 이상으로 제대로 공부하는게 맞다)
profile
나를 꺾어봐

0개의 댓글