컴공

    운영체제에서 락(lock)을 배우는 이유

    같은 프로세스에 속하는 스레드는 메모리를 공유한다 프로세스는 서로 겹치지 않게 독립적인 메모리 주소 공간을 부여받기 때문에 따로 shared memery 형태로 쓰지 않는 이상 같은 메모리 공간에 접근할 일이 없어서 같은 데이터에 동시에 접근할 일이 없다 하지만 스레드의 경우에는 얘기가 달라진다 하나의 프로세스가 여러 개의 스레드들을 가질 수 있는데 이때 이 스레드들은 같은 부모 프로세스 소속이기 때문에 메모리 공간 또한 부모 프로세스의 메모리 공간을 공유한다 이렇게 하면 장점은 같은 부모 밑에 있는 스레드들은 따로 추가적인 조치를 해줄 필요 없이 스레드들 사이에서 데이터 공유가 가능해진다 하지만 이로 인해 필연적으로 조심해야 할 부분이 여러 스레드들이 같은 데이터에 접근하다보면 예상했던 것과 다른 결과..

    스레드 컨텍스트 스위칭이 가벼운 이유

    * 이 글은 스레드 컨텍스트 스위칭의 정확한 의미를 알고 계시다는 전제 하에 작성된 글입니다 👉 " CPU 코어에서 컨텍스트 스위칭 되는 건 프로세스일까 스레드일까 " 글 보러 가기 일반적으로 '프로세스 컨텍스트 스위칭은 무겁고 스레드 컨텍스트 스위칭은 가볍다' 라고 알려져 있다 왜 그런걸까? 프로세스 컨텍스트 스위칭 vs 스레드 컨텍스트 스위칭 컨텍스트 스위칭은 아래와 같은 작업을 수행한다 (넘버는 실행 순서와는 관계 없음) 1. 현재 실행 중인 프로세스 혹은 스레드의 context 백업 (가령, CPU 레지스터 값들, 어디까지 실행됐는지 등) 2. CPU 캐시를 비움(flush) (CPU 마다 L1, L2 cache에 대한 동작이 다를 수 있음, 심지어 안 비울 수도 있음) 3. TLB(table l..

    CPU 코어에서 컨텍스트 스위칭 되는 건 프로세스일까 스레드일까

    프로그램, 프로세스, 스레드 프로세스(process)는 '실행 중인' 프로그램(program)을 의미한다 프로세스는 최소 하나 이상의 스레드(thread)를 가진다 스레드는 CPU 코어에서 실행(execution) 혹은 스케줄링(scheduling)되는 기본 단위(unit)다 프로그램이 메모리에 올라가서 실행 중인 상태가 된 것을 프로세스라고 부르고 한 프로세스는 최소 하나 이상의 스레드들로 동작하게 되며, 이때 이 스레드들 각각이 CPU 코어에서 실행된다고 볼 수 있다 두 종류의 컨텍스트 스위칭(context switching) 컨텍스트 스위칭은 CPU 코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 바뀌는 것을 의미하며 두 종류의 컨텍스트 스위칭이 존재한다 1. 프로세스 컨텍스트 스위칭..

    기술 면접에서 흔히 말하는 스레드는 어떤 스레드일까?

    여러 맥락에서 스레드 개념이 존재한다 자바에도 스레드가 있고 파이썬에도 스레드가 있고 OS 레벨의 스레드가 있다 그럼 우리가 흔히 말하는 스레드는, 기술 면접에서 물어보는 스레드는 어떤 스레드를 말하는 걸까?? 이번 글을 이 부분을 다뤄보려고 한다 면접에서 물어보는 스레드는 OS 스레드 결론부터 얘기하면 면접에서 얘기하는 스레드는 보통 OS 레벨의 스레드를 의미한다 OS 레벨의 스레드의 개념과 특징을 간략하게 정리하면 아래와 같다 * CPU 코어에서 실행되는 단위다 * 프로세스는 여러 개의 스레드를 가질 수 있다 * OS에서 관리된다 * OS가 스케줄링한다 * native thread, OS thread, kernel level thread 등등 여러 형태로 불린다 자바에도 있고 파이썬에도 있는 스레드는..

    MySQL 트랜잭션 serializable 격리 레벨은 MVCC인가?

    일반적으로 MySQL은 MVCC라고 한다 하지만 조금 더 정확히 얘기하면 isolation level에 따라 다른데, read commiited와 repeatable read는 MVCC라고 하지만 read uncommitted와 serializable은 MVCC가 아니라고 얘기한다 MySQL의 serializable 레벨은 MVCC가 아닌가? MySQL에서 serializable 레벨은 MVCC가 아닌 lock으로 동작한다 공식 문서에서 serializable 레벨을 아래와 같이 설명하고 있기 때문이다 This level is like REPEATABLE READ, but InnoDB implicitly converts all plain SELECT statements to SELECT ... FOR S..