본문 바로가기

취미17

프로세스와 스레드(2) 스레드 => 프로세스를 구성하는 실행 흐름의 단위 각기 다른 thread id, 프로그램 counter, register, stack을 가진다. 일반적으로 process , thread를 구분해서 말하기는 하지만 Linux에서는 "Task"라는 이름으로 퉁 치는 경우도 대부분. 가장 주된 차이점은 자원을 공유하는지 안하는지 여부. Process간에는 기본적으로 자원을 공유 X, thread는 프로세스 자원을 공유. => 메모리 효율적일 수 있음. 각 Process마다 자원들이 있고 thread가 따로 존재하게 되는데 아래 사진(multi thread)를 보면 동일한 자원은 모두 공유하고, 개별의 Thread들만 각각의 register stack programm counter를 가지는 것이다. 훨씬 효율적.. 2023. 12. 19.
프로세스와 스레드(1) Kernel , User 영역에서 Process에 관해서 말해보고자 한다. 우선 프로세스란 쉽게 말해서 실행 중인 프로그램이라고 생각하면 된다. 같은 Process인 메모장이 별개의 Process로 관리되는 것을 볼 수 있다. Process는 크게 2가지로 나눌 수 있는데 프로그라운드 프로세스 사용자와 직접 상호작용 하고 있는 프로세스 BackGround Process 사용자와 직접 상호작용 하고 있지 않은 프로세스 다만 이중에선 Daemon, Service와 같이 특별한 프로세스도 있다. => 맡은 바 묵묵히 실행만 되는 프로세스 각각의 Process 마다 PCB (프로세스 제어 블록) 이 있는데 , 일종의 프로세스의 꼬리표 같은 느낌. 운영체제는 PCB를 보고 Process를 판단한다. 위 예시에서 .. 2023. 12. 13.
[C++ Design Pattern] Visitor Visitor 패턴 1 . 반복자(iteration) : 복합 객체의 모든 요소를 동일한 방식으로 열거 2 . 방문자(visitor) : 복합 객체의 모든 요소를 동일한 방식으로 연산 수행 아파트 단지에 방 100개가 있다고 하자 , 얘가 반복자이다. 가스 검침을 수행하는 가스 검침원 (Visitor1) 가전 제품을 설치해주는 설치 기사 (Visitor2) ~~~ 기능을 하는 ~~~~~~~~~~사람 (VisitorX) 이렇게 기능을 수행하는 역할들을 하나의 Class로 만들어 버리는 것이다. #include #include #include template struct IVisitor { virtual void visit(T& e) = 0; virtual ~IVisitor(){} }; template cl.. 2023. 12. 1.
[C++] Iterator Iterator(반복자) ?? - 복합 객체의 내부 구조를 노출하지 않고 , 동일한 방법으로 순차적으로 이동할 수 있는 방법을 제공 #include #include #include int main() { std::list s = { 1,2,3,4,5 }; std::vector v = { 1,2,3,4,5 }; auto p1 = s.begin(); auto p2 = v.begin(); while (p1 != s.end()) { std::cout 2023. 12. 1.