나만의 작은 도서관
[TIL] 240531 캠프 47일차: 식별/비식별 관계, IOCP 본문
오늘 배운 내용
식별관계 비식별관계
식별 관계란, 부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계이다. 부모 테이블의 키가 자신의 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있다. 즉, 부모 데이터가 없다면 자식 데이터는 생길 수 없다.
비 식별 관계란 부모 테이블의 기본키 또는 유니크 키를 자신의 기본키로 사용하지 않고, 외래 키로 사용하는 관계이다. 자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있다. 부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능하다.
IOCP
window에서 비동기 I/O 작업을 하는 방법 중에 가장 뛰어난 방법이다. I/O작업을 비동기로 처리하는 가장 큰 이유는 작업 처리 시간이 CPU 관점에서 오래 걸리기 때문이다. 0.1초도 CPU입장에서 매우 긴 시간의 처리 시간인데 I/O작업은 그 이상의 처리 시간을 가진다. 그렇기 때문에 I/O 작업을 요청하고 작업이 완료할 때까지 idle상태로 대기하는 것은 CPU 리소스의 큰 낭비가 되기 때문에 비동기로 I/O작업을 처리한다. 그런데 여러 쓰레드를 지원하는 고성능 서버에서 싱글 쓰레드로 작업을 처리하는 것은 비효율적이지 않은가? 그래서 여러 쓰레드를 사용하기 위해 여러 시도를 해봤지만 이번에는 문맥 교환과 쓰레드 생성 및 파괴에 실행시간을 잡아먹는 것이 문제가 되었다. 여러 쓰레드를 사용하고 싶은데 CPU하나가 여러 쓰레드를 사용하면 성능이 떨어지고, 그렇다고 싱글 쓰레드를 사용하면 그것대로 성능이 나오지 않는다. 그러면 어떻게 하면 좋을까? 쓰레드를 미리 만들어 놓고 필요할 때 갖다 쓰면 되지 않을까? 그래서 나온 방식이 바로 IOCP이다.
IOCP는 쓰레드 풀에서 대기 상태로 만들어 놓은 여러 쓰레드를 미리 만들어 놓고 작업 요청이 발생했을때 쓰레드를 가져와 실행하는 방식이다. 또한, CPU개수만큼 쓰레드를 사용할 수 있게 사용 가능한 최대 쓰레드 개수를 제한해 두어 하나의 CPU가 하나의 쓰레드만 사용하게끔 설계해 문맥 교환에서 나오는 손실을 최소화 한다. 이렇게 문맥 교환과 쓰레드 생성 및 파괴에서 나오는 성능 저하를 해결함으로써 기존의 문제를 해결한 멀티 쓰레드 방식의 비동기 I/O 작업이 가능해졌다.
오늘의 Trouble Shooting
- 오늘은 해결한 Trouble이 없어요!
오늘 한 일
- 팀 프로젝트 역할 분배
- 팀 프로젝트 깃헙 공유 및 초기 설정
- API 명세서 제작
'Today I Learn' 카테고리의 다른 글
[TIL] 240604 캠프 51일차: prisma client와 연결된 DB간의 관계. 협업에서 발생할 수 있는 문제에 대해서... (0) | 2024.06.04 |
---|---|
[TIL] 240603 캠프 50일차: 소켓, 쓰레드, I/O (1) | 2024.06.04 |
[TIL] 240530 캠프 46일차: Prisma: include, 관계 속성 사용법 (0) | 2024.05.30 |
[TIL] 240529 캠프 45일차: prisma: @map 생략, createMany (0) | 2024.05.29 |
[TIL] 240528 캠프 44일차: prisma: --schema 옵션, $transaction (0) | 2024.05.28 |