전체 글

전체 글

    [CS] Thread 상태, TCB, 위치

    [CS] Thread 상태, TCB, 위치

    Thread스레드란, 프로세스 내에서 동시에 진행되는 작업 혹은 흐름의 단위를 의미하는데 우리는 식당에서 주문(작업)을 하면 주방(프로세스)에서는 요리사(스레드)는 각각의 요리를 준비한다.프로그램은 하나 이상의 프로세스를 가지고 프로세스는 하나 이상의 스레드를 가진다.스레드 자원스레드끼리는 프로세스의 자원을 공유하면서 프로세스의 실행 흐름의 일부가 되기 때문에 동시에 작업이 가능하다.프로세스는 위와 같이 하나의 프로세스에 복수의 스레드가 작동을하는데 프로세스의 Stack을 할당받아 복사하고 Code, Data, Heap은 프로세스 내의 다른 스레드들과 공유된다. 따라서, 아래와 같이 각각의 스레드는 별도의 Stack을 가지고 있지만 Heap 메모리는 고유하기 때문에 서로 다른 스레드에서 가져와 읽고 쓸 ..

    [CS] Process, PCB, Context Switching

    [CS] Process, PCB, Context Switching

    프로세스와 스레드 엄청 많이 들어보는 말이지만 막상 딥다이브를 경험해보다 보면 기본 지식이 부족하다는 것을 종종 느낄때가 있다. 결국 컴퓨터로 만드는 프로그램은 컴퓨터 과학(CS)을 기반으로 만들게 된다. 그렇기에 더욱 기본을 탄탄하게 다지는 것에 대해서 중요성을 느끼고 프로세스와 스레드에 대한 차이를 기반으로 멀티 프로세스 스레드 환경에서 어떻게 작동을 하며 여기서 공유하는 영역은 어디며 공유를 하면 어떠한 장단점이 있고 문제점을 보완하기 위해 어떠한 개념들이 적용되었는지에 대해서도 정리를 해보고자 한다.우선, 해당 글에서는 프로세스와 PCB를 우선적으로 정리한다.프로세스프로세스는 컴퓨터 프로그램의 인스턴스라고 하며 프로그램을 실제로 CPU의 자원을 통해서 실행하는 것을 의미한다.프로세스 구조Stack..

    [DB] Mysql 옵티마이저 힌트

    옵티마이저MySQL 옵티마이저는 SQL 쿼리를 가장 효율적인 방법으로 실행하기 위해 쿼리를 분석하고 실행 계획을 선택하는 구성 요소입니다. 데이터베이스 내부에서 쿼리를 처리할 때 여러 가지 실행 경로가 가능할 수 있는데, 옵티마이저의 역할은 가능한 실행 경로 중에서 비용(리소스 사용, 시간 등)이 가장 낮은 경로를 찾아 선택하는 것입니다.MySQL 옵티마이저의 주요 기능쿼리 분석: 옵티마이저는 제공된 SQL 쿼리를 분석하여 구문적, 의미적 오류가 없는지 확인합니다. 이 단계에서 쿼리가 유효하고 실행 가능한지 검토합니다.쿼리 최적화: 옵티마이저는 다양한 최적화 기법을 사용하여 쿼리를 개선합니다. 예를 들어, 필요없는 조건을 제거하거나, 조인 순서를 변경하거나, 인덱스를 활용하는 방법 등을 적용할 수 있습니..

    [DB] 풀 테이블 스캔과 인덱스 스캔

    mysql 옵티마이저는 다음과 같은 조건이 일치할때 주로 풀 테이블 스캔 테이블의 레코드 건수가 너무 작아서 인덱스를 통해 읽는 것보다 풀 테이블 스캔을 하는 편이 더 빠른경우 WHERE 절이나 ON 절에 인덱스를 이용할 수 있는 적절한 조건이 없는 경우 인덱스 레인지 스캔을 사용할 수 있는 쿼리라고 하더라도 옵티마이저가 판단한 조건 일치 레코드 건수가 너무 많은 경우 강제 풀 테이블 스캔을 해야하는 경우 스트리밍 처리 mysql 스트리밍 처리 서버 쪽에서 처리할 데이터가 얼마인지에 관계없이 조건에 일치하는 레코드가 검색될 때마다 바로바로 클라이언트로 전송해주는 방식을 의미한다. 이 방식으로 쿼리를 처리할 경우 클라이언트는 쿼리를 요청하고 곧바로 원했던 첫 번째 레코드를 전달 받는다. 특징 쿼리 결과를 ..

    [Spring] @Async vs WebFlux

    Spring @Async vs Spring WebFlux 글을 작성하게된 계기 실무에서 서버간 통신을 할때 비동기로 호출해야하는 경우가 있었다. 처음에는 @Async를 사용하였는데 좀 더 깊게 파보니 Spring WebFlux도 많이 사용하는 것을 확인하고 WebFlux도 동시에 써보았는데 WebFlux가 더 빠른 것을 보았다. Spring @Async 설명 @Async 어노테이션은 Spring에서 제공하는 비동기 실행 방법으로 메서드를 별도의 스레드에서 비동기적으로 실행한다. @Async는 Spring의 AOP 기능을 활용하여 메서드 호출을 비동기적으로 처리한다. 이는 스레드 풀을 사용하여 별도의 스레드에서 실행되며, 비동기 작업의 결과 또는 상태는 Future 객체를 통해 관리할 수 있다. @Asyn..