[컴퓨터공학]기초

304호 하숙생·2022년 4월 23일
0

1.프로그램,프로세스,스레드란 무엇인가?

프로그램(Program)

  • 컴퓨터 공학적의미로는 사용자의 입력에 따라 그 입력된 값을 일정한 처리 방법과 순서에 따라 처리하여 결과를 산출해내는 명령문 집합이라고한다. 간단하게말해서 프로그램(애플리케이션)은 코드 덩어리다.

프로세스(Process)

                             (위 사진에서 확인할수 있는 항목 하나하나가 전부 프로세스이다)
  • 프로세스는 프로그램이 운영체제로 부터 실행에 필요한 메모리를 할당받아 코드를 실행하는것. 간단하게 말하면 코드 덩어리인 프로그램이 실행되면 프로세스가 된다.

  • chrome브라우저를 두 개 실행하면 두개의 프로세스가 생기는데 하나의 애플리케이션이 다중(멀티) 프로세스를 만들기도한다.

스레드(Thread)

  • 스레드(Thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

스레드의 특징

  • 프로세스 내에서 실행되는 흐름의 단위
  • 각 스레드마다 call stack이 존재 (call stack: 실행중인 서브루틴을 저장하는 자료 구조)
  • 스레드는 다른 스레드와 독립적으로 동작

멀티 스레드(Multi-Thread)

  • 멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 할수 있다.

멀티 스레딩의 장점

  • 프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우,메모리 공간과 시스템 자원의 소모가 줄어든다. 스레드 간의 통신이 필요한 경우 별도의 자원을 이용하는 것이 아니라, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap영역을 이용한다. 따라서, 프로세스 간 통신방법(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단하기 때문에 시스템의 처리량이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축된다. 이런 장점 때문에 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에 스레드로 나눠 수행한다.

멀티 스레딩의 단점

  • 멀티 프로세스 기반으로 프로그래밍할 때에는 프로세스 간 공유하는 자원이 없다. 따라서 동일한 자원에 동시에 접근하는 일이 없었지만, 멀티 스레딩을 기반으로 프로그래밍할 때에는 공유하는 자원에 대하여 고민이 필요하다. 서로 다른 스레드가 같은 데이터에 접근하고, 힙(Heap)영역을 공유하기 때문에 서로 다른 스레드가 서로 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있다.
    그렇기 때문에 멀티스레딩 환경에서는 동기화 작업이 필요하고 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야하 한다.

2.프로그래밍에서 문자열을 다루는 방법과 유니코드 및 인코딩이란 무엇인가?

3.비트맵 이미지와 벡터 이미지의 차이란 무엇인가?

비트맵 vs 벡터

  • 컴퓨터에서 사용하는 이미지를 표현하는방법은 '벡터'와 '비트맵' 두 가지이다.

비트맵 특징

  • 비트맵은 픽셀이라고 불리는 조그만 사각형이 각각의 색상을 가져 이미지를 구현하는 방식이다.(픽셀이란 이미지를 구성하는 최소단위의 점을 말한다.)
  • 사각형의 픽셀이 모여 만들어진 이미지 이며 픽셀이 모여있기에 확대시 계단현상과 깨짐현상이 나타난다.
  • 픽셀마다 값이 다 다르므로 그라데이션이 들어갈수 있어 경계가 뚜렷하지않다.
  • 각 픽셀마다 색상 정보를 담고있기때문에 이미지가 커질수록 파일의 용량이 커진다.
  • 사진과 같이 색상의 조합이 다양한 이미지에 적합하다.

벡터 특징

  • 벡터는 수학 기반의 선분과 곡선의 모임으로 이미지를 구현하는 방식이다.
  • 이미지를 확대해도 계단현상과 깨짐현상이 나타나지 않는다.(해상도의 영향을 받지않음)
  • 선분과 면으로 이루어져 있기때문에 경계가 선명하고 뚜렷하다.
  • 로고, 캐릭터, 명함 과같은 곳에 적합하다.

4.가비지 컬렉션(GC)이란 무엇인가?

가비지 컬렉션

  • 메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을(어떤 식별자도 참조하지 않는 메모리 공간) 해제하는 기능이다. 즉, 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제하는 기법이다.

장점

  • 개발자가 직접 메모리를 다룰 때에 생길수있는 메모리 누수를 줄일수있다.
  • 프로그래머가 동적으로 할당한 메모리 영역 전체를 완벽하게 관리하지 않다도 된다.

단점

  • GC가 수행되는 정확한 시점을 알 수가 없다.
  • 프로그램이 예측 불가능하게 일시 정지 될 수 있기 때문에 실시간 시스템에 적합하지 않다.

대표적인 가비지 컬렉션의 방법

트레이싱

  • 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법이다.
    객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용 중인지 아닌지를 표시(mark)하고, 그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제한다.

레퍼런스 카운팅

  • 한 객체를 참조하는 변수의 수를 추적하는 방법입니다.
    객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어납니다. 객체를 참조하고 있던 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어듭니다. 레퍼런스 카운트가 0이 되면, 그 객체와 관련한 메모리는 비울 수 있습니다. 레퍼런스 카운트가 0이 된다는 말은 아무도 그 객체에 대한 레퍼런스를 가지고 있지 않다는 말과 같습니다.

5.웹 서비스에서 사용하는 캐시란 무엇인가?

캐시란?

  • 많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미한다.
    컴퓨팅에서 캐시는 일반적으로 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간이다. 첫 작업 이후에 이 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장 공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.

캐시의 일반적인 작동원리

  • 캐시의 데이터는 일반적으로 RAM(Random Access Memory)과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있다. 캐시는 기본 스토리지 계층(SSD, HDD)에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높인다.
    속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장한다. 완전하고 영구적인 데이터가 있는 데이터베이스와는 대조적이다.

캐시의 특징

  • 애플리케이션 성능 개선
  • 데이터베이스 비용 절감
  • 백엔드 부하 감소
  • 예측 가능한 성능
  • 데이터베이스 핫스팟 제거
  • 읽기 처리량 증가
    (읽기 처리량: IOPS; Input/output operations per second. HDD, SSD 등의 컴퓨터 저장 장치의 성능 측정 단위)

웹서비스에서 캐시가 적용되는 예제

  • 클라이언트: HTTP 캐시 헤더, 브라우저
  • 네트워크: DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
  • 서버 및 데이터베이스: 키-값 데이터 스토어(e.g. Redis), 로컬 캐시(인-메모리, 디스크)
profile
304호 하숙생의 코딩일기장

0개의 댓글