728x90
반응형

스레드 10

C++문법 / 생산자 소비자 문제, Producer and Consumer Problem

Mutex로 deadlock을 걸리지 않게 하는 법을 배웠으니 왜 deadlock인 상황이 발생하고 왜 mutex를 걸어줘야하고 왜 thread를 이용해서 작업을 하는지 몸소 느껴보자 먼저 코드를 볼까? #include #include #include #include #include #include #include using namespace std; using namespace chrono; // 생산자 함수 //string을 담는 큐, 뮤텍스 객체, index(스레드 번호)를 매개변수로받음 void producer(queue* downloaded_pages, mutex* m, int index) { for (int i = 0; i < 5; i++) { // 웹사이트를 다운로드 하는데 걸리는 시간이라 ..

C++문법 / 멀티 스레딩, Multi-threading 연산

우리가 스레드를 만드는 이유는.. 효율적으로 사용하기 위해서다. 1부터 10000까지 더하는 작업은 얼마나 걸릴까??? 물론 우리는 n(n+1)/2라는 것을 알고 있지만 컴퓨터는 한 번 경험을 통해서 알게 해주고 싶다. 해보자 우선 스레드 하나로 돌려보자 #include #include #include using namespace std; using namespace chrono; void func1(int *result) { for (int i = 1; i

(A)Synchronous 그리고 (Non)-Blocking

비동기, Asynchronous 와 동기,Synchronous 블로킹,Blocking 과 논 블로킹 Non-Blocking I/O 작업은 user space에서 직접 수행할 수 없기 때문에 user process가 kernel에 I/O 작업을 '요청'하고 '응답'을 받는 구조다. 응답을 어떤 순서로 받는지(synchronous/asynchronous), 어떤 타이밍에 받는지(blocking/non-blocking)에 따라 여러 모델로 분류되는 것이다. 일반적으로 4가지 개념에서 알아보자. 비동기 프로그래밍, 동기 프로그래밍이라는 말을 많이 듣는다. 우선 동기 작업이란 한 번에 하나씩 수행되는 것을 의미한다. 즉, 해당 작업이 끝나기 전까지는 현재 진행중인 작업 외의 다른 작업을 수행하지 못함을 의미한다...

CS Interview 2021.10.22

Thread, 스레드란?

정의 Thread is a basic unit of CPU utilization. CPU, 프로세서 사용의 기본 단위를 말한다. 왜 프로세스가 아닌 스레드가 동작하는 최소단위인가? 동일한 목적을 가진 프로세스가 여러 개가 된다면 code, data stack을 따로 만들어야한다. 하지만 같은 일을 한다면 필요한 데이터를 굳이 2번 만들필요는 없다. (같은 일을 처리하기 위해 동일한 프로그램을 여러 개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하게 되고 PCB 도 각각 만들어야되고 프로세스간 통신을 위해 비용이 커진다.) 데이터의 각 부분만 다르게 각자 읽어서 수행하는 것이 더 효율적이라는 말이다. CPU 수행에 관련된 부분은 나누되 나머지 메모리, 자원같은 것들을 공유하며 존재한다. **Stack ..

CS Interview 2021.06.29

멀티스레드 환경에서의 동기화(Synchronization)

?? 동기화가 뭐지?? 동기화의 목적은 스레드와 프로세스를 조정하는 것이다. ?? 왜 조정하는데...?? 바로 Critical Section(single process; non kernel object)의 경우 때문이다. 뜻은 같은 자원을 접근하는 코드를 말한다. -> critical section은 반복적으로 동작하는 2개 이상의 스레드가 하나의 자원을 공유할 때 발생한다. ***Resource (자원)이란 Memory location이나 Data structure, file 등을 말한다. Critical Section에 대해 조금 더 알아보자 이 말의 뜻은 "같은 자원을 접근하는 코드"이다. 얘도 또한 Object가 존재한다. (Win32 API가 제공) 또한 오직 하나의 스레드만 critical s..

스레드 라이브러리?? Thread library

라이브러리 도서관 아니고 아 근데 라이브러리 도서관처럼 책이 모여있다고 하면 뭐 비슷할 수도 있겠다. 스레드 라이브러리라는 것은 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공하는 것이다. 첫 번째 방법은 커널의 지원 없이 완전히 사용자 공간에서만 라이브러리를 제공하는 것이다. 라이브러리를 위한 모든 코드와 자료구조는 사용자 공간에 존재한다. 그렇게 되면 라이브러리의 함수를 호출하는 것은 시스템 콜이 아니라 사용자 공간의 지역 함수를 호출하게 된다는 것이다. 두 번째 방법은 운영체제에 의해 지원되는 커널 수준의 라이브러리를 구현하는 것이다. 이 경우에는 라이브러리를 위한 코드와 자료구조는 커널 공간에 존재한다. 그렇게 되면 라이브러리 API를 호출하는 것은 커널 시스템 콜을 하는 것과 같아진..

스레드,Thread [운영체제]

스레드를 프로세스에 대해 공부하다보면 알게 되는데,, 그리고 뭐 맨날 컴퓨터 성능보면 8코어 16스레드뭐시기 하는데 뭘까 싶기도 하고 그래서 알아보자 우선 스레드는 CPU 이용의 기본 단위다. 다시 더 나누면 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 나눠진다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션 그리고 열린 파일이나 신호화 같은 운영체제 자원들을 공유한다. 단일 스레드가 기본이지만 당연히 다중 스레드도 있다. 차례대로 알아보자 ** 그냥 프로세스 여러개 돌리면 되는거 아냐??? 라고 할 수 있기도 하지만.. 1. 멀티 프로세스 -> 멀티 스레드로 실행할 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리가능 2..

프로세스(process)란 무엇인가? [운영체제]

쉽게 말하자면 프로세스란 실행 중인 프로그램을 말한다. 자세히 알아보자 운영체제의 주 목적은 사용자 프로그램을 실행하는 것이지만 커널 안에서 보다 사용자 공간에서 가장 잘 할 수 있는 다양한 시스템 작업을 할 필요가 있다. 그래서 하나의 시스템은 일부는 사용자 코드를 실행하고 나머지는 운영체제 코드를 실행하는 프로세스들의 집합체이다. 우선 그림을 보고가자면 이 그림은 프로세스 메모리 배치의 그림이다. **컴퓨터 구조에서 많이 봤다면 같은 것이다. 다시 말하겠다. 프로세스란 실행 중인 프로그램이다. 프로세스의 현재의 상태는 프로그램 카운터(PC) 값과 나머지 프로세서 레지스터의 내용으로 나타낸다. 1. Text: the executable code 실행 코드가 들어간다. 2. Data: global var..

Bounded-Buffer Problem(Producer-Consumer Promlem), 동기화[운영체제]

세마포와 모니터의 사전 이해가 필요하다. [컴퓨터(Computer Science)/운영체제(Operation System)] - 동기화, 세마포 : Synchronization, Semaphores [운영체제] [컴퓨터(Computer Science)/운영체제(Operation System)] - 동기화, 모니터 : Synchronization, Monitor 사실 나는 생산자-소비자 문제로 알고 있었다. 생산자가 데이터를 생산하면 소비자는 그 데이터를 소비하는 형태의 문제이다. 산한 데이터는 중간의 버퍼,buffer 에 저장해두고 소비자는 여기서 필요한 만큼 가져간다. 버퍼의 크기는 유한해서 버퍼 공간 크기 이상의 데이터를 저장할 수 없고 소비자는 버퍼가 비어있다면 가져올 수 없다. **유한한 버퍼의 ..

728x90
반응형