본문 바로가기
Books/한 권 컴퓨터 구조와 프로그래밍 ✔️

[한 권 컴퓨터 구조와 프로그래밍] 12장 - 병렬성과 비동기성

by Aaron-Kim 2022. 9. 19.

컴퓨터는 어떻게 한 번에 많은 일을 하는가

경합 조건이란 무엇인가

  - 경합 조건 (race condition)

    - 2개 이상의 프로그램이 같은 자원에 동시 접근, 자원 사용 순서에 따라 결과가 달라지는 경우

공유 자원

  - 공유 자원 (shared resource)

프로세스와 스레드

  - 운영체제는 프로세스를 관리함

    - 프로세스: 사용자 공간에서 실행되는 프로그램

    - 병렬로 실행되는 프로그램이 자원을 공유해야 경합 조건 발생 가능

    - 핸들러를 인터럽트하기

    - 스레드:  정적인 데이터와 힙을 공유하지만 자체적으로 스택을 갖는 프로그램의 일부

  - 트랜잭션과 작업 크기

    - 여러 연산을 한 트랜잭션에 넣기

  - 락 대기

    - 계속 주기적 시간을 거치면서 체크하는 스핀 방법

    - 락을 요청하는 존재가 관리하는 쪽에 등록하고, 요청이 받아졌을 때 통지를 받을 수 있음

    - 블로킹 모드

      - 시스템이 락을 할당할 수 있을 때까지 락을 요청한 프로그램을 일시중단시킴

    - 논블로킹 모드

      - 프로그램이 계속 실행되고 나중에 락을 얻었는지 여부를 어떤 방식으로든지 통지 받음

  - 교착 상태

    - 데드락의 원인과 방지 방법

      - 데드락 발생 필수 4가지 조건

        - 상호 배제(mutual exclusion): 자원 독점 사용

        - 점유 대기(hold and wait): 자원 점유한 상태에서 다른 자원 요청

        - 비선점(no preemption): 강제로 자원 뺏기 불가

        - 순환 대기(circular wait): 서로 순환적으로 자원 요구

      - 데드락 방지 방법

        - 자원을 상호 배제하지 않고 언제든지 공유할 수 있는 자원으로 만들기

        - 어느 자원을 점유한 다음 다른 자원을 요구하지 않고 한꺼번에 자원을 요구

        - 선점형으로 바꾸기

        - 자원마다 우선순위를 부여해서 모든 프로세스가 다 서로 정해진 순서대로만 자원 요구

  - 단기 락 구현

    - 여러 프로세스가 락에 사용하기 위한 검사 후 설정 (test and set) 명령어 제공

    - 비교 후 바꾸기 (compare and swap)

  - 장기 락 구현

    - 배타적으로 사용할 수 있는 파일 생성

    - 가장 먼저 요청한 프로세스가 성공하게 되는 시스템 콜

브라우저 자바스크립트

  - JS 구현은 이벤트 루프 모델 사용

  - 1997년 DOM의 등장, 2000년경 XHR의 등장

  - JS는 사실 멀티 스레드 기반으로 동작 (이벤트 큐 관련)

비동기 함수와 프로미스

  - 프로미스는 비동기 콜백 메커니즘을 언어 고유 기능으로 넣어서

     라이브러리가 잘못된 비동기 연산 구현하지 못하게 해줌

  - 프로미스는 체이닝 (연쇄 호출)이 가능함

  - 동기적인 코딩 스타일을 반영하는 async / await

  - 비동기 함수는 근본적으로 interrupt 할 수 없는 스레드임

정리

반응형

댓글