728x90 Process3 [번역] Thread Pools in NGINX Boost Performance 9x! Nginx가 비동기, 이벤트 드리븐을 사용한다. 따라서 전통적인 서버 아키텍처처럼 매 요청마다 그에 상응하는 프로세스나 스레드를 생성하는 대신 여러 커넥션과 요청들을 하나의 워커 프로세스에서 처리한다. 이런 동작 과정을 위해 Nginx는 non-blocking 형태의 소켓과 epoll, kqueue와 같은 효율적인 방법을 사용한다. Nginx는 프로세스 갯수가 적고 정적이기 떄문에 메모리 낭비가 적고 CPU 주기가 컨텍스트 스위칭으로 낭비되지 않는다. 이러한 접근법의 이점은 Nginx로 증명되었다. Nginx는 수백만개의 동시 요청과 스케일을 무리없이 감당한다. 하지만 비동기, 이벤트 드리븐 방식도 문제가 존재한다. 바로 blocking이다. 안타깝게도 많은 서드파티 모듈들은 blocking call을 .. 2022. 8. 14. fork()와 exec() 프로세스는 여러 시스템 호출로 인해 생성된다. 그 중 가장 잘 알려진것이 fork()와 exec()이다. fork() fork()는 fork()를 호출한 프로세스를 복재해서 새로운 프로세스를 만든다. 이 프로세스를 child process라고 한다. 새로운 child process가 생성된 후, 프로세스들은 fork() 시스템 호출 다음 명령어를 실행한다. child process는 parent process와 같은 program counter, CPU resgister, open file들을 사용한다. fork()는 파리미터를 가지지 않고 정수를 반환한다. 정수가 음수이면: child process 생성에 실패했다. 정수가 0이면: child process에게 반환되는 값 정수가 양수면: parent .. 2022. 2. 4. Process, Thread 프로세스는 사전적으로 '무엇인가 진행되고 있는 것'을 의미한다. 컴퓨터에서 프로세스는 실행중인 프로그램이다. 컴퓨터 프로그램은 프로그래밍 언어로 작성되고 컴파일 과정을 통해 object file(또는 실행 파일) 형태로 하드디스크에 저장된다. 즉, 프로그램은 목적코드로 작성된 하나의 파일이다. 이런 프로그램을 실행하기 위해 주기억장치에 적재하고 운영체제하의 관리 개체로 등록된다. 이 상태가 프로세스이다. 범용 컴퓨터에서는 여러개의 프로세스가 동시에 존재한다. 따라서 프로세스를 식별하고 관리하기 위해 다음과 같은 속성들이 필요하다. 1. PID(Process Identification Number) 새로운 프로세스가 생성될 때마다 운영체제는 고유한 식별 번호를 부여한다. 여기서의 고유함은 현재 실행 중인 .. 2022. 2. 3. 이전 1 다음 728x90