-
[조각모음-미완성] 뮤텍스와 세마포어 및 프로세스와스레드, ORM N+1문제기타 2021. 4. 6. 01:44
*참고*
critical Section이란 여러 프로세스들이 동시에 동일한 자원을 동시에 접근처리하는 코드의 영역Requirements(동기화 문제에 해결을 위한 기본조건)
- Mutual Exclusion(상호 배제)
프로세스 P1 이 Critical Section 에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section 에서 실행될 수 없다. - Progress(진행)
Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로서 참여될 수 있다. - Bounded Waiting(한정된 대기)
P1 가 Critical Section 에 진입 신청 후 부터 받아들여질 때가지, 다른 프로세스들이 Critical Section 에 진입하는 횟수는 제한이 있어야 한다.
여러 프로세스들이 동시에 동일한 자원을 동시에 접근하려고하면 동기화 문제가 발생된다.
공유된 자원 중 하나의 데이터는 하나의 프로세스만 접근할 수 있도록 제한해두어야하는데 그 역할을 하는 것이 세마포어이다.
세마포어(Semaphore) : 공유된 자원들을 여러 프로세스가 접근하는 것을 막는 것
뮤텍스(Mutex) : 공유된 자원의 데이터들을 여러 쓰레드가 접근하는 것 을 막는 것
(동작방식에 대하여 추후 작성)시스템 자원은 한정적이다.
어떤 것을 (멀티)프로세스에 두고 어떤 것을 (멀티)쓰레드로 둘것인가...?
ORM N+1문제
시퀄라이즈는 레이지 로딩방식으로 동작을 하며 n+1 문제가 발생한다.
예를들어 특정 테이블간 연관관계가 있을 때 특정 테이블에 대하여 결과가 10개의 데이터가 나왔다면 10개의 데이터들은 내부적으로 특정테이블을 참조하기위하여 각각 해당 테이블을 조회한다.(서브쿼리를 수행)해결하기 위하여 join fetch를 이용할 수 있는데 join fetct가 마냥 좋은 것은 아니다.
'기타' 카테고리의 다른 글
[ 조각모음 ] - squelize의 장단점과 package-lock.json (0) 2020.12.16 [CSS] - SVG 이미지 사용 방법 (0) 2020.11.25 - Mutual Exclusion(상호 배제)