hyperskill - Processes and threads 영어 원문
당신이 점심 시간에 푸드 코트에 들어왔고, 그곳의 피자 가게들 의 줄을 보았다고 가정 해 봅시다.
각각의 피자 가게의 임무는 피자를 파는 것이며 (당연) 여러 명의 작업자를 가지고 있습니다.
그들의 목적은 피자를 파는 것 이지만, 피자 가게는 가게에서 주어지는 설비 없이는 피자를 팔 수 없습니다.
한편으로는, 어떠한 피자 가게도 그들의 스태프 없이 피자를 팔 수 없습니다.
일을 수행하기 위해 적어도 하나의 작업자가 있어야 합니다.
이러한 상황은 컴퓨터가 어플리케이션을 실행하는 법, 멀티태스킹을 관리하고, 병렬 실행하는 것과 유사합니다.
더 나은 이해를 위해서, 컴퓨터 과학의 관점과 피자 가게의 속성들 사이의 몇 가지 유사점들을
프로세스(Process) 와 쓰레드(Thread) 로 고려합시다.
Process - 프로세스
Process (프로세스) 는 독립된 실행의 단위인데,
이 실행은 미션을 달성하기 위해 필요한 모든 것을 가지고 있습니다.
짧게 말해서, 프로세스는 쓰레드들, 작동을 위한 모든 필수품, 공유 리소스들을 위한 컨테이너입니다.
매번 공유 자원을 마련하기 위해 새로운 쓰레드를 생성하는 것 보다는,
공유된 자원에 대한 접근을 마련하는 것이 더 저렴합니다.
프로세스는 그들의 모든 작업을 수행하기 위해 적어도 하나의 쓰레드를 가지고 있습니다.
프로세스가 없는 스레드나, 적어도 하나의 쓰레드를 가지지 않은 프로세스는 없습니다.
---
title : The Process - 프로세스
---
flowchart
subgraph Process
direction BT
subgraph Threads
Thread#1
Thread#2
Thread#3
Thread#n
...
end
Shared("Shared resources")
Shared <--> Thread#1
Shared <--> Thread#2
Shared <--> Thread#3
Shared <--> Thread#n
Shared <--> ...
end
이제 만약 우리가 피자 비즈니스를 보게 된다면,
피자 가게가 프로세스 형식으로 서비스를 제공한다는 것을 유추 할 수 있습니다.
피자 가게는 작업자가 작업을 수행하기 위한 모든 환경과 장비를 가지고 있습니다.
설비는 비싸므로, 작업자들이 설비를 공유할 때 저렴하며, 더 효율적입니다.
각각의 작업자가 개인적인 설비를 가지고 있을 필요가 없습니다.
다른 한편으로, 가게는 작업자가 없으면 어떠한 것도 할 수 없습니다.
작업자가 없으면 모든 설비와 장치들도 쓸모가 없으므로,
적어도 하나의 작업자를 가지고 있는 것이 필수적입니다.
요컨대, 이러한 것들은 피자를 만들고 파는 프로세스를 구성하는 것들입니다.
컴퓨터 과학에서, threads(쓰레드) 의 실행은 프로세스 내부 지시의 흐름입니다.
이러한 프로세스는 스케쥴되고, 독립적으로 실행 될 수 있습니다.
각각의 쓰레드는 그것의 실행기를 가지고 있으며, 이러한 실행기는 동시에 오로지 하나의 쓰레드만 수행 할 수 있습니다.
여러 쓰레드가 같은 프로세스 내부에 있다면, 동시에 혹은 병렬로 실행 할 수 있습니다.
Thread 라는 용어가 의미하는 것을 이해하기 위해서,
피자 가게의 직원들에 대해 생각하세요.
직원들은 그들의 일 수행에 대한 설명에 따라 작업합니다.
이들은 규칙들에 따라 다양한 업무들을 완수하는데,
이 규칙들은 가게가 부여한 공유 리소스들을 사용하는 가게에 의해 명시되었습니다.
피자 가게의 작업자들은 쓰레드 실행기들의 역할을 수행하고 있습니다.
작업자가 수행하는 임무들은 피자 가게 프로세스 내부의 쓰레드들입니다.
Internal or lightweight concurrency - 내부, 경량 동시성
작업자들은 피자를 판다는 프로세스 동안에는 서로 다른 역할을 수행 할 수 있습니다.
이들은 프로세스의 서로 다른 지점들에서 각각 동시에 피자 공급자, 캐셔, 요리사가 될 수 있습니다.
이러한 동시성은 작업자들 사이가 아니라, 각각의 작업자들이 수행하는 역할 사이에서 발생합니다.
이러한 역할들에 대한 중요한 것은 그들의 임무가 말 그대로 빨라야 하며,
많은 양의 시간과 공유 자원이 필요하지 않다는 겁니다.
이들은 가볍습니다.(lightweight)
만약에 작업들이 경량적이며, 실행자의 시간과 관심을 제외한 어떠한 공유 자원도 접근할 필요가 없다면,
서로 다른 쓰레드들에서 실행 할 필요가 없습니다.
하나의 쓰레드 내부에서 시간 분할에 따른 동시성 실행을 마련하는 것이 더 저렴합니다.
이러한 종류의 동시성은 명백한 이유로 Internal(내부) 이라고 부릅니다.
종종 이는 lightweight(경량화) 라고 부르기도 하는데,
이는 이러한 쓰레드 내부의 임무들이 말 그대로 작으며, 빠르기 때문입니다.
밑의 그래프는 시간 분할을 사용한 경량화 된 동시성을 가진 작업자의 쓰레드에 대한 예제입니다.
---
title : Thread with Time-slicing == 쓰레드 시간 분할 예제
---
flowchart BT
subgraph g1
Some("1. 타이머 시간에 따라 몇 가지 임무 수행");
Some --> Accept("2. 주문 받기");
Accept --> Pizza("3. 피자 요리하고, 기다리기");
Pizza --> Poll("4. 끌어오기");
Poll --> Check("5. 피자 상태 확인하고 주문 완료하기")
Check --> Complete("6. 돈 받고 판매 완료하기");
Complete --> Some
end
subgraph g2
Notification("알림 : 피자가 준비됨");
end
Notification --> Poll
Conclusion - 결론
Process - 프로세스
프로세스는 작업자의 쓰레드들, 공유된 자원, 파라미터들을 위한 몇 가지 종류의 컨테이너들은,
공통의 목표에 의해 연합됩니다.
각각의 프로세스는 적어도 하나의 쓰레드를 가집니다.
Thread - 쓰레드
쓰레드들은 프로세스 내부에 독립된 실행의 단위입니다.
이러한 쓰레드들은 각각 동시에 혹은 병렬로 실행될 수 있습니다.
Concurrency - 동시성
동시성 임무, 즉,
오로지 실행기의 시간을 위해 경쟁하며, 완료되기 위해 많은 자원을 필요하지 않는 동시성 임무들은
같은 쓰레드 내부에서 동시에 실행 될 수 있습니다.
이러한 임무들은 lightweight(경량화) 라고 부르며,
이러한 유형의 동시성은 internal 혹은 lightweight 중 하나로 부릅니다.
쓰레드 내부의 실행은 동기, 혹은 비동기적으로 될 수 있지만, 절대 병렬로 될 수는 없습니다.
words to remember
equipment : 장비, 장치, 설비
notion : 개념, 의향, 어리석은 생각
as well as : 게다가, ~와 마찬가지로 잘
self-contained : 독립된
arrange : 마련하다, 붙이다, 가지런히 하다, 배열하다
analogy : 유추
concurrency : 동시성
concurrently : 동시에
considerable : 많은, 중요한, 적지 않은
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
Introduction to software architecture - 소프트웨어 아키텍쳐 기초 (0) | 2024.07.15 |
---|---|
Documentation - 프로그램 문서 작성 (2) | 2024.07.15 |
Synchronous, asynchronous, parallel - 동기, 비동기, 병렬 (0) | 2024.07.12 |
Coupling and Cohesion - 연결성과 응집도 (0) | 2024.07.11 |
Code organization. Design principles - 디자인 원칙과 코드 정리 (0) | 2024.07.10 |