스레드 동기화 기법1스레드 동기화란 무엇인가?동기화는 2가지 측면이 있다.메모리 접근에 대한 동기화A, B 스레드가 존재 이 두 스레드가 동시에 한 메모리에 접근하면 문제가 발생함메모리에 접근하기 위해서는 프로그램 코드를 통해 접근한다.그래서 둘 이상의 스레드가 동시에 메모리에 접근하도록 원인을 제공하는 코드 블럭을 가리켜 임계영역이라 한다.이러한 임계영역은 한순간에 하나의 스레드만 실행할 수 있도록 허용해야 한다.그래서 둘 이상의 스레드가 동시에 접근하는 거를 막아야 한다. 이것이 바로 동기화다.임계영역 ⇒ 메모리 접근 동기화가 필요임계영역에 접근하는 것을 동기화한다는 것은 한순간에 하나의 스레드만 접근하도록 하겠다. 이것이 바로 임계영역에 대한 메모리 접근 동기화다.실행순서의 동기화메모리에 접근하는 ..
💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다.배경지난 동시성이슈 해결방법 (2/3) - 데이터베이스 락(Lock)으로 해결하기에 이어 이번에는 레디스(Redis)를 활용하여 동시성 문제를 해결해 본다. 동시성 문제를 해결하기 위해서 레디스에서는 대표적으로 Lettuce와 Redisson을 활용한다. (레디스에 대한 설명은 이번 글에서는 생략한다.) 동시성을 제어하기 위해선 DataBase 또는 Redis에서 제공하는 Lock를 활용하여 데이터의 동시성 접근을 제어하는 방법을 이용해야 한다. DataBase Lock를 이용할 경우 추가적인 인프라 구성요소 없이 동시성을 해결할 수 있다는 장점이 있으나 Lock 획득을 위해 Waiting되는 DataBase Con..
💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다.배경지난 동시성이슈 해결방법 (1/3) - 동시성 이슈와 Application Level로 해결하기 글에서 멀티 스레드 환경에서 개발할 때 발생할 수 있는 경합 상태(Race condition)를 비롯한 동시성 이슈를 알아보았다. 이를 해결하기 위해서는 공유 데이터에 접근할 때 한 번에 한 스레드만 접근하고 작업할 수 있도록 제어를 해야 한다는 사실을 알았고 자바의 synchronized 키워드를 먼저 적용하여 해결하였다. 하지만 자바의 synchronized 키워드는 한 프로세스 내에서만 스레드 안전성을 제공하며 스프링의 @Transactional 어노테이션과 함께 사용하기에 한계가 있었다. 결국 동시성 이슈를 해..
스레드의 생성과 소멸Windows에서의 스레드 생성과 소멸windows에서 사용할 수 있는 가장 기본적인 스레드 생성 함수는 CreateThread이다.dwStackSize스레드 생성과 동시에 독립적인 스택을 할당받는데 이때 스택의 사이즈 결정짓는 요소다.lpStartAddress함수를 가리킬 수 있는 포인터이다.스레드 동작하기 위한 함수. 다시 말해서 스레드의 main 역할을 하는 함수를 지정하는 전달인자이다.lpParameter스레드 함수에 전달할 인자를 지정하는 용도로 사용한다.매개변수 lpStartAddress가 가리키는 함수 호출 시 전달할 인자를 지정하는 것이다.main 함수에서 argv로 문자열이 전달되는 것과 유사하다.생성가능한 스레드 개수는?“메모리가 허용하는 만큼”스레드가 생성될 때마다..