"싱크는 직렬적으로, 에이싱크는 병렬적으로 요청을 처리합니다
동기는 서버에 요청을 보냈을 때 응답이 돌아온 후 다음 요청을 처리할 수 있는 방식으로 요청이 계속해서 대기하게 되어 시스템 전체 효율이 낮아질 수 있습니다
비동기 방식은 먼저 보낸 요청의 응답여부와 관계없이 다른 요청을 처리할 수 있습니다. 따라서 동시에 여러 작업이 실행될 수 있어 자원을 효율적으로 사용할 수 있어 전체 시스템의 효율이 높아집니다
비동기적으로 요청을 처리할 때는 콜백 패턴을 사용하여 공통된 자원에대한 순서를 보장합니다"
비동기 처리를 하기 위한 디자인 패턴으로 피호출자가 호출자를 다시 호출함
동기 방식으로 처리하게되면 언제 끝날지 모르는 스레드의 작업의 상태를 계속해서 확인해야해서 자원을 낭비하게 됨
실행만 시키고 더이상 신경쓰지 않고 있다가 실행된 함수가 필요시 자신을 실행시킨 메소드를 다시 호출함
https://codevang.tistory.com/187
처리되어야하는 작업이 전체 작업의 흐름을 막는지 막지 않는지에따라 분류됨
동기와 비동기와 다른 개념으로 서로 다르게 조합이 가능하다
동기 블로킹
: C나 JAVA의 코드 실행후 커맨드에서 입력 받기 (제어권이 시스템에서 사용자로 넘어가, 리턴값을 필요로해서 사용자 입력할때 까지 기다림)
동기 논블로킹
: 논블로킹으로 자신의 작업을 계속하고 있지만 다른 작업과의 동기를 위해 계속해서 다른 작업이 끝났는지 조회 ex. 게임에서 데이터 로드율을 표시
비동기 블로킹
: 동기 블로킹과 거의 똑같아 사용하지 않고 의도치 않게 사용하거나 비동기 논블로킹을 사용하려다가 실수로 사용하게 됨 ex. Node js(비동기) + MySQL(블로킹)
비동기 논블로킹
: 프론트엔드에서 서버로 api요청을 보내고, 응답을 기다리지않고 바로 자신의 다음 일을 계속 실행한다 ex. ajax 요청, js 비동기 콜백
https://jaehoney.tistory.com/242
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#%EB%B8%94%EB%A1%9C%ED%82%B9__%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9
"선점형 스케쥴링은 하나의 프로세스가 다른 프로세스가 끝나기 전에 해당 프로세스를 중지시키고 자원을 사용할 수 있도록 하는 스케쥴링 방식이고, 비선점형은 하나의 프로세스가 다른 프로세스가 끝날 때까지 기다렸다가 자원을 사용하는 방식입니다.
선점형 스케쥴링은 전체적인 응답속도가 빨라질 수 있지만 컨텍스트 스위칭이 빈번하여 오버헤드가 발생할 수 있습니다 선점형 스케쥴링에는 시분할을 사용하는 라운드 로빈 방식이 있습니다.
비선점형 스케쥴링 방식은 응답 시간의 예측이 가능하다는 장점이 있지만 한 프로세스의 응답시간이 너무 많이 소요될 경우 대기하는 프로세스들이 기아현상에 빠질 수 있다는 단점이 있습니다. 비선점형 방식은 우선순위, FIFO, HRN이 있습니다
선점형은 대화형 시스템에, 비선점형은 배치 시스템에 많이 사용됩니다"
처리 방식 - 순차형/ 대화형
우선순위 존재여부
I/O 장치의 사용 비율
CPU를 점유하고 있는 프로세스가 종료되거나 입출력 요구(I/O)가 발생하여 자발적으로 중지될 때까지 계속 자원을 점유하도록 하는 스케쥴링 기법 → 프로세스가 스스로 CPU 점유를 포기
해야만 다른 프로세스를 실행
응답 시간을 예상할 수 있고
순서대로 처리되어 공정성이 있다고 할 수 있고 스케쥴러의 호출 빈도가 낮고 컨텍스트 스위칭의 오버헤드가 적다. (필수적인 컨텍스트 스위칭 외에는 추가적인 오버헤드가 없음)
일괄 처리 시스템에 적합하고 처리율(시스템 전체의 효율성)이 떨어질 수 있다는 단점이 있다
ex. 배치 시스템 batch processing
여러
프로그램들을 한번에
컴퓨터 프로그램의 실행요청 순서에 따라 순차적으로 실행함CPU를 할당받아 실행 중에 있는 프로세스를 강제로 중지시키고(인터럽트 허용) 다른 프로세스가 CPU를 점유하는 스케쥴링 기법 → OS가 강제로 프로세스의 CPU를 제어함
빠른 응답시간을 필요로하는 대화식 시분할 시스템에 적합
ex. 시분할 시스템
💡 운영체제의 운용 기법
- 배치 처리 시스템
- 멀티 프로그래밍 시스템
한 프로그램에서입출력이 일어날 때
다른 프로그램을 실행 → 다른 프로그램으로 실행하려면 하나의 프로그램에서 입출력이 발생해야함
한 프로그램의 입출력 빈도와 시간, 그리고 수행시간이 다른 프로그램에 영향을 미치기때문에 대화성 증진에 한계가 있음
출력과 동시에 다른 프로그램 수행이 가능해지면서 여러 프로그램에서 출력이 산발적으로 발생하는 경우 생기는 문제를 해결하기 위해 버퍼링과 스풀링이 생김
버퍼링: 입출력시 CPU의 속도와 입출력 장치간의 속도 차이를 해서하기 위해 하드 디스크나 메모리 영역에 자료를 잠시 저장해둠
스풀링: 프린터와 같은 순차적 사용장치를 병렬 수행 프로그램이 사용할 수 있도록 해줌
속도가 빠르고 임의 접근이 가능한 디스크에 출력되는 자료를 임의로 모아놓고 처리- 시분할 시스템
- 멀티 태스킹 시스템
단일 CPU에서 사람이 감지하지 못할 정도로 짧은 시간 안에 실행 응용프로그램이 바뀌어서 사용자에겐 여러 프로그램이 동시에 실행되는 것처럼 보임
단일 CPU에서 여러개로 쪼개진 프로세스가 실행되는 것으로 멀티 프로세싱 (여러 CPU에서하나의 프로그램
을병렬
로 실행하여 실행속도를 극대화)과 다름- 실시간 처리 시스템
- 다중 모드 처리 시스템
- 분산 처리 시스템
여러 개의 컴퓨터를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식
https://lee-mandu.tistory.com/466
https://libertegrace.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81-%EB%B0%B0%EC%B9%98-%EC%B2%98%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%9C%EB%B6%84%ED%95%A0-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%A9%80%ED%8B%B0-%ED%83%9C%EC%8A%A4%ED%82%B9
https://jwprogramming.tistory.com/14
https://limkydev.tistory.com/140
https://inuplace.tistory.com/280
선점형에서는 우선순위가 낮은 프로세스가 자원을 할당받지 못하는 기아현상이 발생할 수 있고 비선점형에서는 수행시간이 긴 프로세스가 자원을 점유하게 되면 이후에 대기하는 프로세스들이 기아현상에 빠질 수 있습니다
하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하려고 할 때 기존의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 메모리에 올리는 것
멀티태스킹, 인터럽트 핸들링, 사용자 모드와 커널 모드 전환시 발생
문맥교환중에는 CPU가 아무 일도 하지 못하는 오버헤드가 발생함
"멀티 스레드는 자원을 공유하여 문맥 교환시 TCB만 교환하게 되어 오버헤드가 적지만 멀티 프로세스에서는 프로세스간에 자원을 공유하지 않아 TCB+PCB를 모두 교환하며 IPC를 사용해 문맥교환을 하게 되는데 이때 오버헤드가 많이 발생하게 됩니다."
쏘스코드에서 스레드에 의해 서로 간섭이 일어나 문제가 발생할 소지가 있는 부분 - 공유자원에 접근하는 코드
사용자모드에서 동작하여 성능이 좋지만(오버헤드가 적음) 하나의 프로세스 안에서 여러 스레드간의 동기화만을 처리
뮤텍스와 세마포어는 커널 모드에서 동작
크리티컬 섹션으로는 불가능한 다중 프로세스의 스레드 사이의 동기화를 처리
세마포어는 지정된 수만큼의 스레드가 동시 실행될 수 있도록 동기화하는 카운팅 세마포어가 있음
https://do-rang.tistory.com/90
"멀티 스레딩이나 멀티 프로세싱에서 사용하는 공유자원에 접근하는 코드 영역을 말합니다. 공유자원에는 둘 이상의 프로세스가 동시에 접근해선 안되며 이를 위해 상호베제, 진행, 한정대기의 3가지 조건을 만족해야합니다 "
def solution(cap, n, deliveries, pickups):
distance=0
left_d=0
left_p=0
for i in range(1,n+1):
left_d+=deliveries[-i]
left_p+=pickups[-i]
while left_d>0 or left_p>0:
left_d-=cap
left_p-=cap
distance+=(n+1-i)*2
return distance