컴공

    프로세스와 스레드의 관계를 바라보는 두 가지 세계관

    프로세스(process)와 스레드(thread)의 관계는 개념적으로 크게 두 가지 세계관이 존재한다 세계관 1 임의의 프로그램(program)이 실행되려면 기본적으로 가지고 있어야 하는 리소스들(메모리 공간, 프로그램 코드, 환경 변수, 프로세스 ID)이 있다 프로그램이 실행되면 OS가 이런 리소스들을 부여하고, 메모리에 올려서 실행 가능한 형태로 만드는데 이렇게 리소스를 부여받아 실행 중인 (혹은 실행 가능한) 프로그램을 프로세스라고 부른다 하지만 실제로 CPU에서 (요즘은 멀티코어니까 각 코어에서) 실행(execution)되고 스케줄링(scheduling) 되는 것은 스레드다 그렇기 때문에 프로세스는 최소 하나의 스레드를 반드시 가져야 하며, 그러므로 이 세계관에서는 스레드 또한 프로세스가 가지는 리..

    DB 트랜잭션 isolation 속성과 lost update

    트랜잭션 isolation 속성의 의미 트랜잭션의 속성 중에는 isolation 속성이 있다 우리말로 격리라는 뜻을 가진 isolation의 의미는 여러 트랜잭션이 동시에 실행해도 각각의 트랜잭션이 서로 다른 트랜잭션에게 영향을 받지 않고 격리돼서 실행되는 것처럼 동작해야 함을 의미한다 Lost update 현상이란? isolation 속성이 없으면 여러 트랜잭션들이 동시에 실행될 때 예상했던 결과와는 다른 결과가 생긴다 예를 들어보겠다 X의 계좌에는 50이 있고 Y의 계좌에는 10이 있다 만약 X에서 Y에게 40을 이체하는 트랜잭션 1과 X에게 30을 입금하는 트랜잭션 2가 동시에 실행됐다고 가정해 보자 그러면 시간 타이밍에 따라 여러 결과가 나올 수 있는데, 아래는 그중에 한 가지 예다 트랜잭션1 트..

    프로세스는 최소한 하나의 스레드를 가진다 (맥북에서 확인하기)

    오늘날의 컴퓨터에서 프로그램 동작 방식 프로그램이 컴퓨터에서 실행되면 그걸 프로세스라고 부른다 그 프로세스는 최소 한 개의 스레드를 가진다 스레드는 CPU 코어에서 실제로 실행되는 실행 단위다 오늘은 실제로 그러한지 맥북에서 테스트해보는 내용이다 맥북에서 테스트를 위한 프로그램 작성 C언어로 아주 간단한 프로그램을 아래처럼 작성했다 // 파일 이름 : hello.c #include #include int main(void) { printf("Hello, world!\n"); // 화면에 출력 sleep(10); // 10초 sleep return 0; // 정상적인 종료를 의미 } 이 코드 어디에서도 명시적으로 스레드를 만드는 코드는 없다 단지 프로그램을 실행하면 호출되는 main() 함수가 있을 뿐이다..

    프로세스와 스레드 차이 많이 헷갈려 하는 포인트

    프로세스와 스레드는 독립적인 존재가 아니다 프로세스(process)와 스레드(thread)를 독립적으로 따로 존재하는 개념으로 인식하는 경우가 꽤 있는 것 같다 예를 들어 프로세스 A가 있고, 그 프로세스에 속한 스레드 x가 있을 때 A와 x 둘 다 독립적으로 CPU 코어에서 실행 가능한 존재로 인식하는 것처럼 말이다 오늘은 이 부분을 정리하고자 한다 프로세스와 스레드와 CPU의 관계 프로세스는 메모리에 올라가서 사용자에 의해 컴퓨터 상에서 '실행 중인 프로그램'을 의미하며 그 프로세스의 실행 정보나 상태(메모리 주소 공간, 프로세스 ID, .. etc)는 OS에 의해 관리된다 하지만 실제로 CPU 코어에서 실행되는 것은 스레드다 (이게 매우 중요한 개념 !!) 그렇기 때문에 하나의 프로세스가 CPU 코..

    CPU 도움 없이는 스레드 동기화가 어려운 이유

    * 스레드 동기화를 설명하고 있지만, 프로세스 동기화 경우에도 딱히 다르진 않습니다 대부분의 락은 CPU 도움이 필요하다 동기화(synchronization)는 여러 스레드들이 동일한 데이터를 쓰고자 할 때 데이터의 변화가 일관성 있게 진행될 수 있도록 만드는 것을 의미한다 동기화는 락(lock)을 통해 구현되며 대표적인 락들은 아래와 같다 spinlock mutex semaphore 이 세 종류의 락은 모두 CPU의 도움을 필요로 한다 오늘은 왜 CPU의 도움이 필요한지 설명드리겠다 👉 락이 어떻게 동기화에 사용되는지 설명하는 글 (이걸 이해해야 아래 내용을 이해할 수 있습니다) 스핀락 사용 예제로 설명하겠다 스핀락은 락을 쥘 때까지 반복해서 락을 쥐려고 시도하는 락이다 그래서 반복문에서 계속 확인을 ..