컴퓨터는 어떻게 한 번에 많은 일을 하는가
경합 조건이란 무엇인가
- 경합 조건 (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 할 수 없는 스레드임
정리
'Books > 한 권 컴퓨터 구조와 프로그래밍 ✔️' 카테고리의 다른 글
[한 권 컴퓨터 구조와 프로그래밍] 11장 - 성능 향상을 위한 알고리즘 기법 (2) | 2022.09.19 |
---|---|
[한 권 컴퓨터 구조와 프로그래밍] 7장 - 데이터 구조와 처리 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 6장 - 입출력과 네트워킹 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 5장 - 컴퓨터 아키텍처와 운영체제 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 4장 - 컴퓨터 내부 구조 (0) | 2022.08.11 |
댓글