작은 고양이의 캣 타워

[Week 02] 서버 프로그래밍 A 1주차

by J4BEZ

프로그램 vs 프로세스

프로그램이 메모리에 로드 되는 순간 프로세스가 됨

프로그램 실제로 CPU나 메모리에 로드될 수 있는 데이터 형식들의 코드들을 의미하며

프로세서는 OS에 의해 관리받을 수 있는 실행 단위

 

왜 OS에서 프로세스 간 메모리(리소스) 공동 활용을 막았을까?!
왜 독립된 메모리 공간 안에서 동작하게 하였을까?!

 

서로 같은 리소스를 활용하게 되면 한 프로세스에서 일어난 수정 이나 변경 사항이

다른 프로세스에도 영향을 미치게 되어 문제가 발생하게 됨

 

단, 한 프로세스 안에 있는 '스레드'들 사이에선 서로 메모리 공간 공유가 가능함

그러나 '순서'가 중요한 경우 '스레드'는 사용하기 어려움

 

 

stack영역을 너무 많이 사용하여 Heap 영역을 넘어갈 경우 => StackOverflow

Inmemory DB => RAM에 DB를 다 올려서 극단적으로 속도를 올리는 기법(대신 돈이 많아야함)

 

가상 메모리: 느리지만, 시스템의 물리적인 메모리(외부기억장치 HDD/SSD)를 가상 공간으로 프로세스에게 제공

 

메모리의 마지막 번지를 사용하는 이유::

Stack:: Last In First Out  가장 나중에 들어간 데이터가 가장 먼저 해제됨

정상적인 괄호문자열인지 확인하기 위하여 사용

 

Queue:: First In First Out

버퍼의 속도제어

 

Stack처럼 사용하는데 데이터가 들어가는 영역

 

사용자가 어떻게 사용하냐에 따라 에러가 일어나는 영역 )=> 런타임 에러가 일어나는 영역 )=> Heap, Stack
로딩 => 지루함 해당 시간 동안 다른 화면을 보여주어야함

 

스레드의 갯수와 속도는 비례하지 않는다.

 

 

소수 찾기 Thread 없이

#include "stdafx.h"
#include <vector>
#include <iostream>
#include <chrono>

using namespace std;
const int MaxCount = 150000;

bool IsPrimeNumber(int number)
{
    if (number == 1)
        return false;
    if (number == 2 || number == 3)
        return true;
    for (int i = 2; i < number - 1; i++)
    {
        if ((number % i) == 0)
            return false;
    }
    return true;
}

void PrintNumbers(const vector<int>& primes)
{
    for (int v : primes)
    {
        cout << v << endl;
    }
}

int main()
{
    vector<int> primes;

    auto t0 = chrono::system_clock::now();

    for (int i = 1; i <= MaxCount; i++)
    {
        if (IsPrimeNumber(i))
        {
            primes.push_back(i);
        }
    }
    auto t1 = chrono::system_clock::now();
    auto duration = chrono::duration_cast<chrono::milliseconds>(t1 - t0).count();
    cout << "Took " << duration << " milliseconds." << endl;

    //    PrintNumbers(primes); 실제로 소수를 출력하면 이 함수의 주석을 해제하세요.

    return 0;
}

 

 

블로그의 정보

작은 고양이의 캣 타워

J4BEZ

활동하기