본문 바로가기

전체 글

(74)
[C++/서버/컴퓨터구조] 메모리 구조와 Atomic 결론 : 멀티스레드로 오면서 CPU 파이프라인과 메모리에 write가 적용되는 과정에서 발생하는 가시성 문제를 해결하기 위해서 atomic을 이용해서 동일 객체 상 동일 수정 순서를 보장해주는 식으로 메모리 상 대입의 순서를 보장한다. 이 과정에서는 다양한 메모리의 정책이 있는데 크게 3개로 나눌 수 있다. Sequentially Consistent (seq_cst) - 가장 엄격(컴파일러 입장에서 최적화 여지가 적다. = 직관적), 기본 설 Acquire-Release (acquire, release) Relaxed (relaxed) - 가장 자유(컴파일러 입장에서 최적화, 직관적이지 않음) [NC 면접 질문] 이전까지는 싱글 스레드를 기반으로 작업을 하는 환경이 많았기 때문에, 문제가 안 되던 CPU..
[C++/서버/컴퓨터구조] 캐시와 CPU 파이프라인 보호되어 있는 글입니다.
[C++/서버] Future 보호되어 있는 글입니다.
[C++/서버] Condition Variable 보호되어 있는 글입니다.
[C++/서버] Event 결론 : 이벤트라는 커널 오브젝트를 이용해서, 만약 스레드가 함수를 진행하기 위해서 어떤 상황이 필요한 경우 이 상황이 발생할 때까지 기다리게 해서 CPU의 사용량을 낮출 수 있는 프로그래밍 기법이다. 화장실 문이 열릴 때까지 대기 일단 자리로, 그리고 나중에 다시 랜덤하게 돌아오기 화장실 문 앞에서 대기할 직원 하나 두고 난 일자리로 돌아간 뒤, 일이 끝나면 직원이 나한테 알려주기 이제 마지막 방식을 알아보자. 직원은 사실 커널 오브젝트이다. 커널 오브젝트는 이 락이 풀리는 '이벤트'가 끝날 때까지 대기를 했다가 이 이벤트가 끝난 경우 그 자원을 기다리던 프로그램에 알려주는 식이다. 이벤트는 정말 간단하다. 화장실 문이 열린다와 닫힌다 이 두 상황이 있는 것이다. 화장실 안에는 사람이 있고 밖에는 기다..
[C++/서버] Sleep 보호되어 있는 글입니다.
[C++/서버] Spinlock 보호되어 있는 글입니다.
[C++/서버] Lock-2 락의 경우 서버 개발을 할 때 너무 필수적이고, 면접에서 자주 나오는 경우다. 그렇기 때문에 다양한 방식으로 Lock을 구현하는 연습은 꽤나 중요하다. 즉 우리는 이 화장실의 좌물쇠를 만드는 연습을 충실히 해보자. 내가 직장에서 일하고 있다가 직장 화장실을 갔을 때 누군가 들어갔다. 화장실 앞에서 대기하는 방법은 3가지로 요약할 수 있다. 무작정 기다린다. - 화장실 내에서 손 씻는 소리가 난단건 곧 나온다는 것이다. 그리고 자기 일터와 화장실을 왔다갔다 하는 시간은 굉장히 오래 걸리니까 그냥 계속 기다리는 방식이다. 이 방식을 컴퓨터로 하면 스핀락이라고 한다. (계속 루프를 돌면서 lock이 풀렸나 확인하는 것이다. 일단 일터로, 화장실은 다시 돌아온다. - 먼저 일자리로 돌아가서 일을 하다가 3분 정..