싱글 쓰레드와 멀티쓰레드, 쓰레드의 I/O 블락킹

0
post-thumbnail

main 쓰레드

: main 메서드의 코드를 수행하는 쓰레드
: 쓰레드는 '사용자 쓰레드'(main)와 '데몬 쓰레드'(보조) 두 종류가 있다.

  • 실행중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.
    • Call stack(호출스택)에 main, run 쓰레드 2개가 있을 때,
      main 쓰레드가 실행을 종료해도 run 쓰레드는 남아있으면 프로그램은 종료되지 않음.

  • join은 다른 쓰레드가 끝날 때 까지 main메서드가 종료되지 않도록 하는 메서드

싱글쓰레드와 멀티쓰레드

  • 멀티쓰레드의 작업시간은 OS스케줄러가 정함. 저 그림도 완벽한건 아니지만 저런식으로 구성된다.
  • 멀티쓰레드에서 a->b 로 넘어가는 것을 context switching이라고 함(문맥전환)
    • 넘어갈 때 시간이 소요됨. 동시에 두 작업이 번갈아서 실행되지만, 한 작업을 쭉 진행하는 것 보단 시간이 더 걸린다.
    • 시간이 더 걸리더라고 두가지 작업을 동시에 할 수 있다는게 (채팅하면서 파일 다운로드 받기) 이득이 너무 큼.
    • 작업을 효율적으로 할 수 있다. -> i/o블락킹과 연관

쓰레드의 I/O 블락킹 (blocking)

: 입출력시 작업 중단

  • 싱글쓰레드에서는 입출력을 받는동안 일을 하지 못하지만, 멀티쓰레드에서는 그 시간동안 다른 쓰레드를 진행할 수 있다.
    -> 이 경우에는 멀티쓰레드가 작업을 더 일찍 끝낼 수 있음!
profile
백엔드를 공부하고 있습니다.

0개의 댓글