본문 바로가기

전체 글111

[혼공컴운] 스레드 스레드 프로세스를 구성하는 실행의 흐름 단위로, 하나의 프로세스는 여러 개의 스레드를 가질 수 있음. 여러 개의 스레드는 하나의 프로세스 자원을 공유하면서, 각자의 스레드 ID와 PC값, 스택을 가짐 멀티 프로세스 vs 멀티 스레드 멀티 프로세스 동일한 프로세스를 동시에 실행하면 코드 영역, 데이터 영역, 힙 영역 등을 비롯한 모든 자원이 복제 되어 메모리에 적재 각 프로세스는 독립적으로 운영되기 때문에 하나의 프로세스에 문제가 있다고 하더라도 다른 프로세스에는 큰 영향이 없을 수 있음 프로세스 간 통신(IPC)도 소켓이나 파이프를 통해서 충분히 가능함. 프로세스끼리 공유하는 데이터를 저장하는 공유 메모리(shared memory) 영역을 이용해서 통신하는 방법도 존재 멀티 스레드 코드, 데이터, 힙, .. 2023. 4. 11.
[혼공컴운] 명령어 병렬 처리 기법 명령어 파이프라인 명령어를 동시 처리하는 기법을 명령어 파이프라이닝(Instruction Pipelining)이라고 함. 아래 그림과 같이 명령어를 겹쳐서 실행하는 것 (하나가 끝날 때까지 기다렸다 다른 하나를 실행하는게 X) 명령의 단계가 겹치지만 않으면 CPU는 명령어를 동시에 실행할 수 있음 명령어 파이프라이닝은 어떤 경우 성능 향상에 실패하기도 하는데 그 유형은 아래와 같음 데이터 위험: 어떤 명령어가 다른 명령어의 결과 값 등에 의존하는 경우 제어 위험: 분기 등으로 인해 프로그램 카운터에 갑작스러운 변화가 발생하는 경우 프로그램 카운터는 기본적으로 바로 다음 명령을 내려야 하는데, 만약 한 명령어가 끝에 바로 다음 주소가 아닌 훨씬 멀리 떨어진 주소의 명령어를 실행시키는 경우. 분기 예측을 통.. 2023. 4. 10.
4. 파이썬 크롤링 코드에 Process, Pipe 적용하기 저번 시간에 AWS Lambda에서 Pool을 지원하지 않는다는 사실을 알게 되었다. (자세한 과정은 여기 참고) Process와 Pipe를 이용해서 코드를 다시 짜라는 말에 너무나 슬펐지만... 완성하려면 모... 짜야지... 내가 운영체제에 대한 이해가 깊지 않다보니 process와 pipe를 이해하는데 있어 너무나도 많은 노력이 필요했다. 우선 전체적인 process의 사용방법은 아래와 같다 import multiprocessing from multiprocessing import Process def practice(arg): print('multiprocessing is so hard') p1 = Process(target=practice, args='1') # 프로세스 인스턴스 생성 p1.st.. 2023. 4. 7.
[혼공컴운] 프로세스 상태와 계층 구조 프로세스 상태 운영체제는 PCB에 적힌 프로세스의 상태를 통해 프로세스를 관리. 생성 상태: 메모리에 적재되어 PCB를 할당받은 상태. 바로 실행 상태가 되는 것이 아니라 준비 상태가 되어 CPU 할당을 기다림 준비 상태: CPU의 할당을 기다리고 있는 상태 실행 상태: CPU를 할당 받아 실행 중인 상태. 타이머 인터럽트가 발생한다면(CPU가 할당된 시간을 모두 사용한다면) 다시 준비 상태가 됨 입출력 장치의 조작이 있다면 대기 상태로 도입 대기 상태: 입출력장치가 사용되는 경우 입출력을 요청한 프로세스가 입출력장치의 작업이 완료되기 기다리는 상태 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다림 종료 상태: 프로세스가 종료된 상태로 운영체제는 PCB와 사용한 메모리를 정리.. 2023. 4. 7.