본문 바로가기
반응형

프로그래밍/컴퓨터 과학(CS)8

2편] 멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱에 대해서... 앞전에 동기, 비동기, 블로킹, 논 블로킹에 대해 설명을 했습니다. 이와 이어지는 내용입니다. 예제의 이해를 쉽개 하기 위해서 통신할때를 가정으로 두고 진행하겠습니다. 1. 멀티 프로세스말그대로 프로세스를 여러게 이용하는 것입니다. 클라이언트당 프로세스 하나를 물리는 것이죠. 이런식으로 프로세스를 늘리는 것이죠. 하지만 이런 방식은 굉장히 비효율적입니다. 프로세스 자체는 하나의 프로그램단위로 굉장히 큽니다. 또한 Context switching으로 인해 시스템 저하도 발생하죠. 흔히 알고있는 fork()로 만드는 것이 이 프로세스입니다. 위와 같은 단점때문에 쓰레드라는 개념으로 통신을 하기 시작합니다. 2. 멀티 쓰레드쓰레드는 프로세스보다 작은 단위이며 프로세스 안에서 논리적으로 동작하는 하나의 작업단위.. 2020. 9. 8.
1편] 동기와 비동기 블로킹과 논블로킹에 대해서.... 요즘 자료도 많아지고 굉장히 개념 자체가 햇갈립니다. 저도 조사하면서 "내가 배운 내용이 맞나?" 싶을 정도로 햇갈리는 내용들이 많아서 이렇게 정리합니다. 3편으로 나눌 생각이고, 동기, 비동기, 블로킹, 논 블로킹, 멀티 프로세스, 멀티 쓰레드, 멀티 플렉싱, select, poll, epoll, IOCP, boost::asio::context 순으로 진행하려고 합니다. 요번 글은 동기, 비동기, 블로킹, 논 블로킹에 대한 내용입니다. 블로킹과 논 블로킹에 대해 예기하기 앞서, 동기와 비동기에 대해 예기해 보겠습니다. 1. 동기와 비동기??동기와 비동기는 굉장히 다양한 곳에서 쓰입니다. 그리고 뜻하는 정의도 조금씩 다르죠. 하지만 근본적으론 같습니다. 프로그래밍 쪽에서의 동기와 비동기의 차이는 "단일 .. 2020. 9. 7.
C++ 클래스와 구조체의 데이터 정렬(Data alignment) 왜 데이터 크기가 다르지? 우리는 C++를 사용할 때 class나 struct를 사용합니다. 알고계시는 분들도 있겠지만 기본적으로 맴버변수를 선언하면 자료형의 크기가 맞춰집니다. 이를 컴파일 데이터 정렬이라고 하는데, 일단 코드를 보시죠. #include class A { int num; //4byte char c1; //1byte char c2; //1byte}; int main(void) { printf("%d\n", sizeof(A)); return 0;} 6바이트가 나와야 하지만 8바이트가 나오게 됩니다. 이는 구조체(struct)도 마찬가지 입니다. 왜 이렇게 되는지 살펴보고자 합니다. 1. 프로세스의 메모리 접근 단위기본적으로 해당 코드를 실행하면 메모리로 올라가게 됩니다.그리고 프로세스는 함수가 실행될 때마다 변수의 .. 2020. 6. 24.
C++ false sharing이란?(거짓 공유) 1. false sharing 이란?? false sharing은 멀티 쓰레드 환경 + CPU의 멀티 코어에서 발생됩니다. cpu 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목현상이 일어나는 것을 뜻합니다. 설명하기에 앞서 false sharing이 일어난 코드를 보겠습니다. #include #include #include long long num1 = 0; long long num2 = 0; long long num3 = 0; void fun1() { for (long long i = 0; i < 1000000000; i++) num1 += 1; } void fun2() { for (long long i = 0; i < 1000000000; i++) num2 += 1; } void.. 2020. 6. 22.
C++ 에서의 OOP의 개념에 대한 설명(Abstraction, Encapsulation, Inheritance, Polymorphism) 1. OOP란?? (Object Oriented Programming) C++는 객체지향 언어 입니다. 해당 언어를 OOP라고 부르며 Object Oriented Programming의 약자입니다. 이 OOP에 대한 개념에 대해 설명해 볼까합니다. 왜냐하면..... 면접에서 물어볼 수 있는 질문이기 때문입니다. 기본적으로 C++의 OOP라 하면 다음과 같은 단어가 나옵니다. 1. Class 2. Object 3. Abstraction 4. Encapsulation 5. Inheritance 6. Polymorphism 이중에 Class와 Object는 Abstraction에 대한 내용에 포함 되므로 Abstraction, Encapsulation, Inheritance, Polymorphism에 대한 설.. 2020. 6. 21.
Thread와 Process의 Context Switching Context Switching이란? 우선 Thread에서의 Context Switching과 Process의 Context Switching은 같은 말입니다. 단지, 이 둘의 차이점은 내부에 있습니다. 그럼 의미가 동일한 Context Switching에 대해 간략한 설명을 하겠습니다. Process를 예를 들면..... "나는 현재 멜론을 들으면서, 롤을 하고 있으며, 친구들에게 카카오톡 문자가 PC로 오고 있다." 라고 한다면 총 3번의 Context Switching이 일어난 것입니다. 멜론 노래를 재생 -> 게임 롤(LOL)에서의 컨트롤 -> 카카오톡 문자 -> 멜론 노래 재생 -> 게임 롤(LOL)컨트롤 -> 카카오톡 문자...... 이러한 과정들이 0.0몇초만에 반복되게 됩니다. 너무 빠르게.. 2020. 6. 5.
CPU와 메모리 사이의 동작 일반적으로 윈도우에서 프로그램을 실행시키면(.exe) 프로그램은 잘 실행됩니다. 이 프로그램 단위를 컴퓨터 용어로 프로세스(process)라고 합니다. 이 프로그램이 실행되면 주기억장치인 RAM에 올라가는 것이 아니라 가상메모리로 올라가게 됩니다. 이 부분은 여기!에 잘 설명해 놨으니 참고하시길 바랍니다. 그럼 CPU와 RAM 사이에서 데이터를 주고 받으면서 프로그램이 잘 동작하게 됩니다. 여기서 좀 더 자세히 들여다보면 CPU와 RAM 사이를 연결해주는 통로를 버스(BUS)라고 하며, CPU도 ALU, Control Unit, Register Set, Bus interface로 나눌 수 있습니다. 그렇다면!! CPU는 RAM에서 데이터를 가져와 어떻게 처리하는지 살펴보겠습니다. 1. ALU(Arithm.. 2019. 12. 10.
메모리 구조에 대해서(stack, heap, buffer overflow) 프로그램을 만들고 실행을 하게되면 메모리 라는 곳에 코드들이 올라가 실행되게 됩니다. 사실 메모리는 물리적 메모리(Physical Memory)와 가상 메모리(Virtual Memory)로 나뉘게 됩니다.일반적으로 코드를 실행하면 가상메모리에 적재 됩니다. 물리적 메모리는 RAM이고 가상 메모리는 HDD의 용량에서 가져와 사용하게 됩니다.운영체제는 프로그램을 실행할 때 필요한 최소정보만 RAM에 저장을 합니다.그리고 이를 Working set이라고 합니다. 그 후 프로그램을 실행하면서 필요한 데이터 정보를 가상 메모리에서 가져와상황에 맞게 물리적 메모리에 맵핑하고 맵핑을 해제하고이런 작업을 반복하게 됩니다. 이것을 페이징(Paging)기법 이라고 합니다. 가상메모리의 주소 데이터들을 일정한 크기의 블록으.. 2019. 1. 19.
반응형

스킨편집 -> html 편집에서