2020-10-07 TIL

1 minute read

Thread

  • https://brunch.co.kr/@kd4/3

정규 표현식

  • https://hamait.tistory.com/342
  • https://www.slideshare.net/ibare/ss-39274621?qid=c5a51df1-3b85-4b2e-9daa-363e4de5b924&v=&b=&from_search=1

프로토콜

  • https://blockdmask.tistory.com/185

멀티태스킹(Multi-tasking)

  • 동시에 여러 작업을 실행
  • 구현방법
    • 멀티 프로세싱 : 프로세스를 여러개 복제하여 실행
    • 멀티 스레딩 : 멀티 태스킹이 필요한 작업만 분리하여 여러개 실행

CPU 스케쥴링

  • 여러 개의 프로세스를 동시에 실행하기 위해 cpu 사용을 관리하는 방법
    • 1) Round-Robin
      • 각 프로세스에 균등한 실행 시간 부여
      • Window OS
    • 2) Priority + Aging
      • 우선 순위가 높은 프로세스에 cpu 사용 권한을 더 많이 배분한다.
      • 단 우선 순위가 낮아서 실행이 연기될 때마다 우선 순위 레벨(age)을 높여서 결국 실행하게 만든다.
      • Lunux, macOS, Unix

멀티 프로세싱 <- 예전의 멀티태스킹 구현방식

  • 부모 프로세스 -> 복제 -> 자식 프로세스
  • 프로세스는 힙, 스택 등의 메모리를 가지고 있다
  • 메모리 그대로 복제
  • 부모 프로세스 종료해도 자식은 종료하지 않는다.
    • 단순히 복제(fork) -> 구현(코딩)이 쉽다.
    • 메모리를 그대로 복제 -> 메모리 낭비가 심하다
    • 자식 프로세스가 부모에 종속되지 않는다.

멀티 스레딩 <- 현재의 멀티태스킹 구현방식

  • 프로세스가 스레드 생성
    • 스레드는 스택 메모리만 가지고 있음
    • 힙 메모리는 프로세스의 힙 메모리를 공유해서 사용함
  • 스레드 생성 -> 구현이 조금 더 복잡
  • 프로세스의 힙을 공유한다 -> 메모리 절약
  • 스레드가 프로세스에 종속 -> 프로세스 종료 = 스레드 종료

Java 스레드 구현

  • Thread <—— MyThread 의 run() {독립적으로 수행할 작업}
    • new MyThread().start();
  • «interface» Runnavle <- - - MyRunnable 의 run() {독립적으로 수행할 작업}
    • new Thread(new MyRunnable객체).start();

스레드

  • 모든 스레드는 일회용이다.
  • 모든 스레드는 각각 다른 실로 이루어져 있다.
  • 한 번 실행된 스레드는 다시 사용할 수 없다.
  • main() 메서드는 스레드 실행이 완료될 때 까지 종료되지 않고 기다린다.
  • main 스레드의 실행을 모든 스레드 완료 후로 미루고 싶으면 join()을 사용한다.
  • sleep() 을 사용하면 cpu가 멈추고 main 스레드를 잠재우기 때문에 실행을 지연시킬 수 있다.

Categories:

Updated: