2023. 12. 15. 20:21 용어 관련

thread란

반응형

우리는 rpgoramming을 하면서 thread라는 말을 자주 듣게 된다.
이번 포스팅에서는 thread란 무엇인지에 대해서 간단하게 알아보자.

thread란 ?
thread는 어떠한 program 내부에서, 특히 process 내에서 실행되는 흐름을 의미한다.
일반적으로 하나의 program은 하나의 process를 생성하지만 하나의 process안에서는 여러개의 thread를 생성, 실행할 수 있다.
이러한 실행 박식을 multithread라고 한다.

process와 thread의 차이
multithread와 multiprocess는 여러 흐름이 동시에 진행된다는 점에선 같다고 볼 수 있다.
(multiprocess : 여러 program이 동시에 실행되는 상태)
다만 multiprocess는 각 process가 독립적으로 실행되며 특정 process가 실행되기 위해선 context switching을 통해 cpu를 점유해야 한다.
반면 multithread의 경우 동일한 process내에서의 작업 흐름이므로 특정 메모리를 공유하며 이로 인해 동일 process내의 다른 thread가 cpu를 점유할 때 context switching이 발생하지 않는다.

multithread의 장점
multithread의 장점은 cpu가 여러개인 환경에서 각각의 thread가 cpu를 하나씩 점유하면 작업 처리 속도가 훨씬 빨라진다는 것이다.

multithread의 단점
다만 multithread의 단점도 여러가지가 존재하는데 우선 특정 thread 간의 실행 순서에 대해서 알수가 없다는 것이다.
간단한 예로 여러 thread가 특정 변수의 값을 1씩 증가시키는 경우 code 상에서는 단 1줄로 변수값을 1증가시키지만, 실제 기계어 레벨에서 살펴본다면 레지스터에 대한 작업 단위로 구분할 수 있고 thread의 cpu점유가 어떻게 되는지에 따라서 변수의 값이 증가하지 않을 수도 있다.
이러한 순서 보장이 안되기 떄문에 여러가지 문제가 발생할 수 있고 이를 해결하기 위한 구현 난이도가 높아진다.

thread의 종류
thread는 해당 thread를 지원하는 주체에 따라서 2가지로 구분된다.

user level thread
사용자 스레드는 kernel 영역 상위의 app영역에서 지원되며 일반적으로는 사용자 라이브러리를 통해서 구현된다.
사용자 라이브러리는 스레드의 생성 및 스케줄링에 대해 관리기능을 제공한다.
동일한 메모리 영역에서 스레드가 생성 및 관리 되므로 속도가 빠른 장점이 있지만, 시스템 호출 등의 요청이 있을 시 다른 스레드들이 유휴상태에 빠지게 되는 단점이 있다.
이는 kernel이 process 내부의 thread를 인식하지 못하기 때문에 process를 대기상태로 전환시키기 때문이다.

kernel level thread
kernel level thread는 OS가 지원하는 thread 기능으로 구현되며, kernel이 thread의 생성, 스케줄링을 담당한다. thread가 system call등으로 중단되더라도, kernel은 process내의 다른 thread를 중단시키지 않고 실행시켜준다.

thread data
thread는 두가지 data가 존재한다. thread자체의 기본 ata는 실행과 관련된 data를 지니며, 자신만의 고유한 thread id, PC(program counter), register, stack을 지닌다.
code, data, file등의 자원은 process의 자원을 사용하며 동일 process하의 다른 thread들과 공유한다.
기본 data외의 특정 thread에만 필요한 정보들이 필요한 경우도 존재하는데,
이러한 data는 (TSD)thread specific data라고 부른다.
예를 들면 각 thread 별로 처리하는 transaction 이 다를 경우 이에 대한 transaction id를 기억해야한다.
그 외의 예로는 TLS(thread local storage) 등등이 있다.

참고-
https://ko.m.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

반응형

'용어 관련' 카테고리의 다른 글

UUID란  (0) 2023.12.16
Process에 대해서  (0) 2023.12.13
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
DeadLock, Live Lock  (0) 2021.06.20
Posted by Sweetmeats_boy

2023. 12. 13. 23:53 용어 관련

Process에 대해서

반응형

우리는 개발을 하면서 process라는 말을 자주 접한다. 이번 포스팅에서는 process란 무엇인가를 포함해서 다양한 내용을 다뤄 볼 것이다.

process란 무엇인가?
process는 컴퓨터에서 연속적으로 실행되고 있는 program을 의미하며
종종 cpu scheduling 대상인 task와 동일한 의미로 사용된다.
process는 program 그 자체 또는 program의 상태가 memory 상에서 실행되는 작업 단위를 지칭한다.
- program A를 여러개 실행하면 여러개의 process가 생성된다.

process의 구조
process의 구조는 크게 아래와 같이 구분된다.
. text : 컴파일 된 code 가 저장된느 영역
. data : 전역변수 및 초기화된 data가 저장되는 영역
. heap : code 상에서 동적으로 생성되는 ata가 저장되는 영역
. stack : 함수 콜스택, 지역변수 등이 저장되는 영역

process의 상태와 그에 대한 설명
process는 아래와 같은 상태를 가진다.
. create
- proces를 생성하는 상태
. running
- process가 cpu를 점유하고 관련 명령어들을 실행 중인 상태
. ready
- process가 CPU를 사용하고 잇지는 않지만 점유를 준비중인 상태.
. waiting
- process가 특정 input 혹은 signal을 기다리는 상태.
. terminated
- process가 종료된 상태


process의 상태 변화
하나의 program이 실행되면 그에 대응하는process가 생성되어 준비 리스트에 들어간다.

그 후 이미 준비 리스트에 있던 다른 process가 CPU를 할당받아 떠나면 순차적으로 앞으로 나아간다.

process가 겪는 상태 변화는 아래와 같다

. dispatch : ready -> running

. block : running -> blocked

. wakeup : blocked -> ready

. timeout : running -> ready

process mode

process는 두가지의 mode가 존재한다. 각각 UserMode와 KernelMode이다.

우선 간단하게 알아둘 것으로는 운영체제는 기본적으로 가상 메모리를 user 영역과 kernel 영역으로 구분한다.

 kernel 영역은 kernel, kernel 확장기능, 대부분의 장치 driver를 실행하기 위한 예비 공간이다.

반면, user 영역은 모든 사용자 모드의 application들이 동작하는 영역으로 해당 메모리는 필요할 때 Paging 처리 될 수 있다.

User 영역의 process는 일반적으로 고유한 가상 메모리 영역에서 실행되며, 다른 process의 메모리에 접근할 수 없다.

 


참고 -
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

반응형

'용어 관련' 카테고리의 다른 글

UUID란  (0) 2023.12.16
thread란  (0) 2023.12.15
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
DeadLock, Live Lock  (0) 2021.06.20
Posted by Sweetmeats_boy

2023. 12. 13. 16:55 Web

HTTP란 무엇인가?

반응형


HTTP란 무엇인가?
위키에서 HTTP에 대한 설명은 아래와 같다.
HTTP는 W3 상에서 정보를 주고받을 수 잇는 protocol이다.
주로 HTML 문서를 주고받을 때 사용되며 주로 TCP를 사용한다.
(HTTP/3 부터는 UDP를 사용할수 있다고 함)

반면 MSDN에서는 아래와 같이 설명하고 있다.
HTTP는 HTML 문서와 같은 "리소스"들을 가져올 수 있도록 해주는 PROTOCOL입니다.
HTTP는 WEB에서 이루어지는 모든 데이터 교환의 기초이며, Client-Server protocol이다.
수신자 측에 의한 요청이 초기화 되는 protocol을 의미한다.
하나의 오나전한 문서는 텍스트, 레이아웃 정보, 이미지, 비디오, 스크립트 등의 하위 문서들로 재구성된다.
client와 server 들은 개별적인 message를 통해 통신하며 이를 각각 request, response라고 한다.
HTTP는 Application layer의 protocol로 TCP 혹은 암호화된 TLS를 통해 전송된다.
HTTP의 호가장성 덕분에 오늘날 하이퍼 텍스트문서, 이미지, 비디오 등의 정보를 server로 전달하기 위해서 사용되기도 한다.


HTTP기반 시스템의 구성 요소
HTTP 는 기본적으로 client-server protocol이다.
요청은 단 하나의 개체에 의해서 전송되며, 개별적인 요청들은 서버로 보내진 후 server에서는 이 요청에 대해서 처리한 결과를 응답에 담아 전달한다.
이 요청과 응답의 사이에는 여러 개체가 존재하는데 gateway, proxy server 등이 있다.

HTTP에서의 client란?
실제 User를 대신해서 동작하는 모든 도구를 의미한다.
브라우저가 될 수도 있고 web을 크롤링하는 bot이 될수도 있다.
브라우저는 항상 server에 요청을 보내는 개체이며 절대 server가 될 수 없다.(가끔 혼동하는 사람이 있다.)

HTTP에서의 Web Server란?
Server는 Client 요청에 대해서 문서(응답)을 제공하는 역할을 한다.
논리적으로는 단일 기계이지만 실제로는 복합 장치(로드밸런싱, DB, 캐시서버 등)들로 구성 될 수 있다.
  
HTTP의 특징
. HTTP는 간단하다.
. HTTP는 확장가능하다.
. HTTP는 stateless이다.

HTTP의 기본적인 순서
. 요청을 보내거나 응답에 사용 될 TCP 연결을 준비한다.
. HTTP message를 전송한다. 이 때 HTTP essage는 HTTP 버전에 따라 암호화 되기도 한다.
- HTTP /2 이전 버전의 경우 message가 평문이라서 인간이 읽을 수 있지만 HTTP/2는 압축 및 암호화 된다.
. Server에 의해 전송 된 HTTP 응답을 읽는다.
. 이후 TCP연결을 닫거나 다른 요청을 위해서 재사용한다.


HTTP 요청에는 무엇이 있는가?
HTTP는 웹 page를 로드하는데 필요한 정보를 요청하는 방식으로 인터넷에서 이루어진 HTTP 통신에는 여러 정보를 포함하고 있다.

HTTP Request 에 포함된 정보
. HTTP 버전 정보
. URL
. HTTP Method
. HTTP HEADER
. HTTP body

HTTP Method란?
HTTP Method는 HTTP 요청을 통해 Server에 기대하는 작업을 나타낼 수 있다.
Method는 GET, POST, PATCH 등 다양한 종류가 있고 각각의 Method 별로 Server에 기대하는 작업이 다르다.
가령, GET Method의 경우 요청에 대한 응답으로 특정 정보를 수신하는 것을 기대하는 반면, POST Method의 경우 요청정보에 포함된 특정 값들이 Server의 data에 반영되는것을 기대한다.

HTTP HEADER란?
HTTP HEADER에는 Dictionary Data가 저장된다.
키와 대응되는 값이 포함되어 있으며 HEADER는 모든 HTTP요청 및 응답에 포함된다.
HEADER 에는 브라우저가 활용하거나 요청 데이터와 관련된 정보등 핵심정보들이 포함된다.


HTTP Request Body
HTTP Request Body에는 여러가지 정보가 포함되어 있거나 어떤한 정보도 없을 수 있다.
실제 현실에서는 주로 특정 유저의 data가 포함되거나 검색을 요청 시 검색타입 및 검색어가 포함되어 있다.

HTTP Response에 포함된 정보
. HTTP Status Code
. HTTP HEADER
. HTTP Request Body

HTTP Status Code란?
HTTP Status Code는 HTTP요청에 대한 상태를 나나태며 해당 요청이 정상적으로 응답되었는지 등에 대한 여부를 구분할 수 있게 각각 여러 값을 지닐 수 있다.
(HTTP Status Code에 대해서는 별도 포스팅할 예정)

HTTP Response Body 란?
HTTP Response Body 는 HTTP Request Body 처럼 응답에 포함되는 여러 정보를 포함한다.
가령, HTTP Request Method가 GET인 경우에 대한 응답일 경우 해당 URL에 대한 HTML 문서가 포함된다.

HTTP HEADER
HTTP Response  의 경우에도 HEADER를 포함한다.
이 때 HEADER에 포함되는 정보는 응답 본문의 내용이 어떠한 컨텐츠 타입인지, 해당 데이터의 언어 형식 등 중요한 정보가 포함되어 전달된다.



참고 -
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview https://www.cloudflare.com/ko-kr/learning/ddos/glossary/hypertext-transfer-protocol-http/

반응형
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.9
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함