lxzun / Coding-study

0 stars 1 forks source link

CS 기초 정리 #3

Open yanghoJI opened 2 years ago

yanghoJI commented 2 years ago

list VS deque

listdeque사용에 따른 속도 측정

1. Stack 구조로 사용할때

First In Last Out 구조의 stack으로 두가지 모듈을 실험함


from collections import deque
import time

iter_num = 10**5
a = []
b = deque()

t1 = time.time()
for i in range(iter_num):
    a.append(0)
t2 = time.time()
runtime1 = t2-t1
print(f"list append time : {runtime1:.5f} sec")

t1 = time.time()
for i in range(iter_num):
    b.append(0)
t2 = time.time()
runtime2 = t2-t1
print(f"deque append time : {runtime2:.5f} sec")
print(f"list / deque ratio : {runtime1 / runtime2 :.3f}")

iter_num = 10**5
a = [0] *iter_num
b = deque(a[:])

t1 = time.time()
for i in range(iter_num):
    a.pop()
t2 = time.time()
runtime1 = t2-t1
print(f"list pop time : {runtime1:.5f} sec")

t1 = time.time()
for i in range(iter_num):
    b.pop()
t2 = time.time()
runtime2 = t2-t1
print(f"deque pop time : {runtime2:.5f} sec")
print(f"list / deque ratio : {runtime1 / runtime2 :.3f}")

pop

list pop time : 0.01194 sec deque pop time : 0.01150 sec list / deque ratio : 1.038


### 1. Queue 구조로 사용할때
First In First Out 구조의 queue로 두가지 모듈을 실험함
- 오른쪽 끝에서 append,  왼쪽끝에서 pop이 발생함

~~~python

from collections import deque
import time

iter_num = 10**5
a = []
b = deque()

t1 = time.time()
for i in range(iter_num):
    a.insert(0, 0)
t2 = time.time()
runtime1 = t2-t1
print(f"list append left time : {runtime1:.5f} sec")

t1 = time.time()
for i in range(iter_num):
    b.appendleft(0)
t2 = time.time()
runtime2 = t2-t1
print(f"deque append left time : {runtime2:.5f} sec")
print(f"list / deque ratio : {runtime1 / runtime2 :.3f}")

iter_num = 10**5
a = [0] *iter_num
b = deque(a[:])

t1 = time.time()
for i in range(iter_num):
    a.pop(0)
t2 = time.time()
runtime1 = t2-t1
print(f"list pop left time : {runtime1:.5f} sec")

t1 = time.time()
for i in range(iter_num):
    b.popleft()
t2 = time.time()
runtime2 = t2-t1
print(f"deque pop left time : {runtime2:.5f} sec")
print(f"list / deque ratio : {runtime1 / runtime2 :.3f}")

pop

list pop left time : 2.18717 sec deque pop left time : 0.01293 sec list / deque ratio : 169.168

Nayoung1124 commented 2 years ago

프로세스와 스레드 (Process and Thread) _ 운영체제

정의

프로세스: 운영체제로부터 자원을 할당받은 작업의 단위 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위


프로그램 > 프로세스 > 스레드

프로그램 > 프로세스

프로그램: 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가지 않은 정적인 상태 프로그램을 실행한다면, 파일은 컴퓨터 메모리에 올라가고, 이를 동적인 상태라고 하며, 이 상태의 프로그램을 프로세스라고 한다.

즉, 프로세스는 작업중인 프로그램을 의미한다.

프로세스 > 스레드

프로그램이 복잡해지면서 프로그램 하나가 단순히 한가지의 작업만 하지 않게 되었다.

그래서 더 작은 실행 단위 개념이 필요해졌고, 그래서 등장한 것이 스레드이다.

스레드는 프로세스의 특성의 한계를 해결하기 위해 만들어진 개념


프로세스와 스레드의 작동 방식

운영체제는 프로세스가 메모리에 올라갈 때 프로세스마다 독립된 메모리 영역을 Code/Data/Stack/Heap 의 형식으로 할당한다.

각각 독립된 영역을 할당하기 때문에 각 프로세스는 다른 프로세스의 변수나 자료에 접근 불가능하다.

이와 다르게 스레드는 서로 메모리를 공유한다.

프로세스와 스레드의 차이

만약 한 프로세스가 실행하다가 오류로 인해 강제 종료 된다면, 다른 프로세스에게 영향을 주지 않는다.

반면, 스레드는 메모리 영역을 공유하기 때문에 하나의 스레드에서 오류가 발생한다면 같은 프로세스 내의 모든 스레드가 강제 종료된다.

멀티태스킹 멀티스레드

멀티태스킹: 하나의 운영 체제 안에서 여러 프로세스가 실행되는것 멀티스레드: 하나의 프로세스가 여러 스레드를 사용하여 동시에 처리하는것

동기화 문제(Synchronization Issue)

멀티스레드를 사용하면 각각의 스레드 중 어떤것이 어떤 순서로 실행될지 순서를 알 수 없다. A > B > A의 순서로 스레드를 사용했다면 A가 두번째 실행 될 때, 자원에 접근하지 못하거나, 수정된 자원에 접근하게 될 수 있다.

스레드가 전역변수를 함께 사용할 경우 발생하는 문제를 동기화 문제 라고 하고 이 문제 때문에 프로그래머가 멀티스레드를 사용할 때 신중해야 한다.


정말 다른 프로세스의 정보에는 접근할 수 없을까?

사실은 가능하다.

  1. IPC(Inter-Process Communication)을 사용한다.
  2. LPC(Local inter-Process Communication)을 사용한다.
  3. 별도로 공유 메모리를 만들어서 정보를 주고받도록 설정해주면 된다.

이런 방법으로 가능한데, 단순히 CPU 상에서 진행되는 과정이 아니라 RAM과 CPU 사이의 캐시 메모리까지 초기화되기 때문에 자원 부담이 크다.

lxzun commented 2 years ago

TCP/IP_네트워크

TCP/IP (Transmission Control Protocol/Internet Protocol)

TCP/IP 개념

💡 프로토콜이란? 물리적 또는 논리적 레벨로 통신을 처리하는 규칙 세트. 컴퓨터 간 데이터를 주고받을 때 상호 간에 수행하는 절차가 다르면 정상적으로 통신을 할 수 없다. 프로토콜은 네트워크 상에서 컴퓨터 간 통신하기 위해 규정한 약속으로, 신호 송신의 순서(handshaking)나 데이터 표현법, 오류 검출법 등을 포함한다.

TCP/IP 5계층

image

애플리케이션 계층(Application Layer, L5, 5계층)

전송 계층(Transport Layer, L4, 4계층)

네트워크 계층(Network Layer/IP Layer, L3, 3계층)

네트워크 인터페이스 계층(Network interface/Data Link Layer, L2, 2계층)

하드웨어(Hardware/Physical Layer, L1, 1계층)

캡슐화, 역캡슐화

image


Reference

yanghoJI commented 2 years ago

질문 샘플

지원자는 다음 a~f 조건들을 모두 만족해야 한다.

a. 다음 질문들 중 절반 이상에 대해서 일정 수준 이상 대답할 수 있음.

  1. 지금 사용 중인 스마트폰의 해상도는 얼마인가? 화면 캡처를 해서 bmp로 저장하면 용량이 어떻게 되는가? 그걸 png와 jpg로 저장하면 각각 용량이 어떻게 되는가? 동영상의 압축 원리는 무엇일까?

  2. 한국의 gmail 사용자가 미국의 gmail 사용자에게 메일을 보냈다. 얼마 만에 도착 할까? 어떤 과정을 거칠까? 이에 대해 5분 이상 상세히 얘기할 수 있는가?

  3. 가상 메모리는 무엇인가? 페이지와 스왑은 무엇인가? 디스크와 메모리의 속도 차이는 어느 정도이고 그 원인은 무엇인가? SSD의 장점은 무엇인가?

  4. 데이터베이스에서 인덱스를 달면 좋은 점은 무엇인가? 그럼 왜 모든 컬럼에 인덱스를 달지 않는가? 멀티 컬럼 인덱스와 레인지 쿼리는 무엇인가?

  5. 10기가바이트짜리 파일을 C 드라이브에서 D 드라이브로 복사를 한다. 얼마나 걸릴까? A 폰에서 C 드라이브로 옮겨온다면? 만약 1메가바이트짜리 1만 개라면 얼마나 걸릴까? 카피를 동시에 여러 개 돌리면 더 빨라질까?

  6. C 또는 C++에서 메모리 관련 버그에는 어떤 것이 있는가? 각각 디버깅은 어떻게 할 수 있는가. 자바 또는 다른 어떤 언어에서의 가비지 컬렉터의 역할은 무엇이고 그 원리는 무엇인가?

  7. 암호에서 얘기하는 플레인 텍스트라는 것이 무슨 뜻인가? ‎비대칭 암호화, 그리고 인증서에 대해서 설명하라. 사용자의 비밀번호를 안전하게 보관하는 방법은 무엇인가?

  8. 동시사용자 최대 100명, 채팅방 1개, 텍스트만 주고받는 것이 기능의 전부인 최소 스펙의 채팅 서버를 데모가 가능한 정도의 안정성을 확보하는 수준으로 만들어야 한다. 어떤 언어로 몇 줄 정도에 어느 정도 기간에 만들 수 있는가?

  9. 디지털 시계 프로그램을 만들어야 한다. 초 단위로 표시해야 한다. 어떻게 작성할 것인가? 그렇게 작성 하면 장점과 단점은 무엇인가?

  10. 전임자가 만든 어떤 프로그램이 있는데 생각보다 너무 느리게 동작하는 것 같다. 어떤 부분부터 어떻게 살펴보는 것이 좋을까?

  11. Dynamic Programming, A* 알고리즘, B+ 트리에 대해서 아는 대로 설명하라.

  12. 소스 관리 및 배포에 대해서 아는 대로 상세히 얘기하라.

  13. Virtual Box, AWS, GCE에 대해서 아는 대로 상세히 얘기하라.

  14. NoSQL, NodeJS 중에 아는 것에 대해서 아는 대로 상세히 얘기하라.

  15. jQuery, AngularJS, React Native 중에 자신 있는 것에 대해서 상세히 설명하라.

  16. Windows 또는 Linux와 다른 Android 또는 iOS의 특징에 대해서 상세히 얘기하라.

  17. ASCII, Unicode, UTF-8에 대해서 아는 대로 상세히 얘기하라.

treejw commented 2 years ago

B-Tree 개념 & 응용 _ 자료구조

데이터베이스 > 인덱스 (index)


인덱스의 자료구조


이진트리


B-Tree (B트리)

정의


B-Tree에 노드 검색/삽입/삭제 과정 (예시 - 3차 B-Tree)


B-Tree의 한계




출처

Nayoung1124 commented 2 years ago

파티셔닝_데이터베이스

파티셔닝이란?

배경

목적

성능

가용성

관리 용이성


장점

관리적 측면

성능적 측면

단점

종류

SangKyuu commented 2 years ago

운영체제

프로세스와 메모리 영역

image

코드 영역 : 프로세스가 실행할 코드가 기계어의 형태로 저장된 공간이다. (컴파일 타임에 결정, Read-Only)

데이터 영역 : 전역 변수, static 변수 등이 저장된 공간이다. 전역 변수, static 변수를 참조한 코드는 컴파일하고 나면 데이터 영역의 주소값을 가르킨다. (컴파일 타임에 결정, Read-Write : 실행 도중 변경 가능)

힙 영역 : 프로그래머가 관리하는 메모리 영역으로, 힙 영역에 메모리를 할당하는 것을 동적 할당이라고 한다. (런타임에 결정, 스택보다 할당할 수 있는 메모리 공간이 많으나 데이터 읽고 쓰기가 느림)

스택 영역 : 함수 안에서 선언된 지역변수, 매개변수, 리턴값, 복귀 주소 등이 저장된다. 스택의 LIFO 방식에 따라 함수 호출 시 기록하고 종료되면 제거한다. (컴파일 타임에 결정, 정해진 크기가 있으므로 stack overflow 에러 발생 가능)


PCB (Process Control Block)

PCB는 특정 프로세스에 대한 정보를 담고 있는 운영체제의 자료구조이다. 프로세스가 운영체제의 스케줄링 알고리즘에 따라 CPU를 할당받을 때, 작업을 진행 중 프로세스를 전환하면 해당 정보를 PCB에 저장하고 CPU를 반환한다. 스케줄링에 의해 재실행되었을 때 이전에 어디까지 작업이 진행되었는지 정보를 저장한다. 프로세스 생성과 동시에 그 프로세스의 고유한 PCB도 함께 생성된다.

프로세스 제어 블록(PCB)에 저장되는 정보


프로세스 스케줄링

프로세스 스케줄러는 멀티 프로그래밍과 time sharing의 목적을 달성하기 위해 실행 가능한 여러 프로세스 중에서 하나의 프로세스를 선택해 실행한다. 각 CPU 코어는 한번에 한 프로세스를 실행할 수 있다. 따라서 단일 CPU 코어 시스템에 반해 멀티 코어 시스템은 한 번에 여러 프로세스를 실행할 수 있다.

멀티 프로그래밍 (multiprogramming) : CPU 사용률을 최대화하기 위해 항상 프로세스를 실행하도록 한다. 어떤 프로세스가 CPU를 사용하다가 I/O 작업 등 CPU를 필요로 하지 않는 순간이 오면 다른 프로세스가 CPU를 사용할 수 있도록 한다.

시분할 (time sharing) : 각 프로그램이 실행되는 동안 사용자들이 상호작용할 수 있도록 프로세스 간 CPU 코어를 자주 전환하는 것이다. CPU가 하나의 프로그램을 수행하는 ms으로 제한하여 프로그램을 번갈아 수행하도록 하면 CPU가 하나인 환경에서도 여러 사용자가 동시에 사용하는 듯한 효과를 가져올 수 있다.

프로세스의 상태

운영체제는 준비 큐(Ready Queue), 대기 큐 (Waiting Queue) 등의 자료구조를 두어 이들 프로세스를 관리한다.

선점(preemptive)과 비선점(non-preemptive)

프로세스 스케줄링은 다음 네 가지 경우에 일어날 수 있다.

스케줄링 시 상황 1, 4에서는 선택권 없이 새 프로세스를 선택해야 한다. 하지만 상황 2, 3에서는 다음과 같은 선택권이 있다.

비선점 스케줄링 : CPU가 할당된 어떤 프로세스는 종료 / waiting 상태로 전환하여 CPU를 해제할 때까지 CPU를 유지하고, 다른 프로세스는 그 때까지 CPU를 사용할 수 없다. 선점 스케줄링 : 어떤 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 CPU를 선점할 수 있다. Windows, macOS, Linux 및 UNIX를 포함한 거의 모든 최신 운영체제는 선점 스케줄링 알고리즘을 사용한다.

스케줄링 알고리즘


- RR (Round-Robin) Scheduling

선점 스케줄링 각 프로세스는 time quantum (or time slice) 이라는 작은 시간 단위(10-100ms)를 갖게 된다. 프로세스는 1 time quantum 동안 스케줄러에 의해 CPU를 할당 받고, 시간이 끝나면 interrupt를 받아 Ready Queue의 tail에 배치된다. Ready Queue는 Circular FIFO queue 형태이다. RR의 평균 대기 시간은 긴 편이다. 하지만 공정하다. n개의 프로세스가 있고 time quantum이 q일 때, 어떤 프로세스도 (n-1) x q 시간 단위 이상 기다리지 않는다. Time quantum 설정 시 주의할 점

Time quantum이 너무 크다면 : FCFS와 같아진다. Time quantum이 너무 작다면 : Context Switching이 너무 빈번하게 일어나 overhead가 발생한다. 위와 같이 RR 알고리즘의 성능은 time quantum의 크기에 좌우될 수 있으므로 적절히 선정해야 하며 이는 context-switch time보다 큰 것이 좋지만 또 너무 커서는 안 된다. (경험적으로 CPU burst의 80프로는 time quantum보다 짧은게 좋다고 함)


- Priority Scheduling

정수로 표현된 우선순위가 더 높은 프로세스에게 CPU를 할당하는 스케줄링이다. 우선순위는 내부적/외부적으로 정의할 수 있다. 내부적 : 시간 제한, 메모리 요구 사항, 열린 파일 수, 평균 I/O burst 대 평균 CPU burst 비율 등 측정 가능한 수량 사용해 계산 외부적 : 프로세스의 중요성, 컴퓨터 사용에 대해 지불되는 자금의 유형 및 금액, 작업을 후원하는 부서, 기타 정치적 요인 등 선점 / 비선점 스케줄링 모두 가능하다. 선점 방식 : 새로 도착한 프로세스의 우선 순위가 현재 실행 중인 프로세스의 우선 순위보다 높으면 CPU 선점 비선점 방식 : 같은 경우 단순히 새 프로세스를 Ready Queue의 맨 앞에 둔다. 문제점) indefinite blocking, starvation 실행할 준비가 되었으나 CPU를 기다리는 프로세스는 block된 것으로 간주될 수 있다. 우선 순위가 낮은 일부 프로세스는 무기한 대기 상태가 될 수 있다. 해결 방안) Aging, Round-Robin과 결합 Aging : 오랫동안 대기하는 프로세스의 우선순위를 점진적으로 높이는 방식으로 문제점을 해결할 수 있다. 예를 들어 대기 중인 프로세스의 우선순위를 매초 늘리는 것이다. RR+PS : 우선순위가 가장 높은 프로세스를 실행하는데, 동일한 우선순위의 프로세스에 대해서는 Round-Robin 스케줄링을 적용한다.



[참조링크](https://github.com/Seogeurim/CS-study/tree/main/contents/operating-system#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%A0%9C%EC%96%B4-%EB%B8%94%EB%A1%9D-process-control-block-pcb)
treejw commented 2 years ago

트랜잭션(Transaction)_데이터베이스

정의


트랜잭션 상태 & 기타 개념

기타 개념

Commit

- 모든 작업들을 정상 처리하겠다고 확정하는 명령어
- 해당 처리 과정을 DB에 영구 저장하겠다는 의미
- Commit을 수행하면 하나의 트랜잭션 과정이 종료되고, 이전 데이터가 완전히 반영되어 UPDATE 된다.

Rollback

- 작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어
- 트랜잭션이 시작되기 이전의 상태로 되돌아감 (=마지막 Commit을 완료한 시점으로 돌아간다는 말)
- 즉, Rollback은 Commit하여 저장한 상태를 복구하는 것

TPS (Transaction Per Second)

- 초당 트랜잭션 실행 수
- DBMS의 성능을 TPS로 측정


트랜잭션 상태

img1 daumcdn


(1) 활성 (Active) 트랜잭션이 정상적으로 실행중인 상태
◾ 작업 성공 시 (2-1) 부분 완료 (Partially Committed) 트랜잭션의 마지막까지 실행되었지만, Commit 연산이 실행되기 직전의 상태 (2-2) 완료 (Committed) 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
◾ 작업 실패 시 (2-1) 실패 (Failed) 트랜잭션 실행에 오류가 발생하여 중단된 상태 (2-2) 철회 (Aborted) 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태


🔸 트랜잭션의 특징 : ACID

원자성 (Atomicity) 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야 한다. (All or Nothing)
일관성 (Consistency) 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
격리성 (Isolation) ( = 독립성, 고립성) 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경중인 데이터 값을 훼손하지 않아야한다. ( = 트랜잭션은 상호 간의 존재를 모르고 독립적으로 수행되어야 한다는 것)
지속성 (Durability) 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다. ( = 트랜잭션의 성공 결과 값은 장애발생 후에도 변함없이 보관되어야 한다는 것)


트랜잭션 격리 단계 (명령어)


Read-Uncommitted

Read-Committed

Repeatable-Read

Serializable


격리레벨 상세표 (with 공유락, 베타락)

  • DB 락
    • 공유락(LS, Shared Lock) : 읽기를 할 때 사용되는 락
      • 트랜잭션 A가 특정 데이터에 대해 공유락을 걸면,
      • 다른 트랜잭션은 읽는 것만 가능
    • 베타락(LX, Exclusive Lock) : 읽고 쓰기를 할 때, 사용되는 락
      • 트랜잭션 A가 특정 데이터에 대해 베타락을 걸면,
      • 다른 트랜잭션만 읽고, 쓰기 불가능

image

image

image

image

image


출처

lxzun commented 2 years ago

TCP Handshake_네트워크

질문

  1. TCP의 연결 설정 과정과 연결 종료 과정이 단계가 차이 나는 이유가 무엇인가요?
  2. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까요?


연결 설정 과정(3-way Handshaking) & 연결 종료 과정(4-way Handshaking)


TCP Handshake

💡 용어

  • ISN( Initialized Sequence Number ): 초기 시퀀스 번호, 운영체제에 의해 랜덤한 값이 생성된다.
  • SYN(Synchronization): 연결요청, 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보낸다.
  • ACK(Acknowledgement): 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송한다.
  • FIN(Finish) : 세션을 종료시키는데 사용되며 더 이상 보낸 데이터가 없음을 표시한다.


연결 설정 과정(3-way Handshaking)

연결 종료 과정(4-way Handshaking)

💡 용어 CLOSE_WAIT: 자신의 통신이 끝날 때까지 기다리는 상태. TIME_WAIT: Client에서 세션을 종료 시킨 후 뒤늦게 도착하는 패킷이 있을 수 있기에 이에 대비하여 클라이언트는 서버로부터 FIN을 수신하더라도 일정 시간(디폴트 240초) 동안 세션을 남겨 놓고 잉여 패킷을 기다리는 상태.

답변

  1. TCP의 연결 설정 과정과 연결 종료 과정이 단계가 차이 나는 이유가 무엇인가요? -> 연결 설정 과정과 다르게, 연결 종료 과정에서는 전송 중인 데이터에 대해 고려해야 한다. 때문에 FIN 플래그를 전송하여 데이터를 다 보냈는지 여부를 확인하는 과정이 추가적으로 존재한다.

  2. 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까요? -> 클라이언트는 이러한 현상에 대비하여 클라이언트는 서버로부터 FIN을 수신하더라도 일정 시간 동안 세션을 남겨놓고 라이브 패킷을 기다리는 TIME_WAIT상태가 존재하기 때문에 240sec 이상 늦게 도착하는 것이 아니라면 데이터를 전송 받을 수 있다.


참고 blog1 blog2 blog3

Nayoung1124 commented 2 years ago

Blocking, Non-blocking & Synchronous, Asynchronous _ 운영체제

Synchronous와 Blocking은 무언가를 기다리게 하고, Asynchronous와 Nonblocking은 기다리지 않고 바로바로 처리된다.


blocking vs non-blocking

이 그룹은 호출되는 함수가 바로 return하느냐 마느냐가 관심사이다. 주로 IO의 읽기, 쓰기에 사용된다.

  • Blocking
  • 호출된 함수가 자신의 작업을 완료할때까지 return하지 않는다
  • return 값을 받아야 끝난다.
  • Thread 관점으로 본다면, 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용/대기 한다.
  • A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것


Synchronous vs Asynchronous

이 그룹은 호출되는 함수의 작업 완료 여부를 누가 신경쓰느냐가 관심사이다.

  • 동기(Synchronous) image


확장

Blocking Nonblocking
Synchronous Sync-Blocking Sync-Nonblocking
Asynchronous Async-Blocking Async-Nonblocking

Sync-Blocking

Async-Nonblocking

Sync-Nonblocking

Async-Blocking

image

SangKyuu commented 2 years ago

IPC (Inter Process Communication)

IPC 종류

  1. PIPE
  2. Named PIPE
  3. Message Queue
  4. Shared Memory
  5. Memory Map
  6. socket

IPC 별 특징


1. PIPE

정의

구조

유의사항

도식화

image


2. Named PIPE

정의

구조

유의사항

도식화

image


3. Message Queue

정의

구조

유의사항

도식화

image


4. Shared Memory

정의

구조

유의사항

도식화

image


5. Memory Map

정의

구조

사용시기

유의사항

도식화

image


6. Socket

정의

구조

사용시기

유의사항

도식화

image