728x90 Thread3 [번역] Thread Pools in NGINX Boost Performance 9x! Nginx가 비동기, 이벤트 드리븐을 사용한다. 따라서 전통적인 서버 아키텍처처럼 매 요청마다 그에 상응하는 프로세스나 스레드를 생성하는 대신 여러 커넥션과 요청들을 하나의 워커 프로세스에서 처리한다. 이런 동작 과정을 위해 Nginx는 non-blocking 형태의 소켓과 epoll, kqueue와 같은 효율적인 방법을 사용한다. Nginx는 프로세스 갯수가 적고 정적이기 떄문에 메모리 낭비가 적고 CPU 주기가 컨텍스트 스위칭으로 낭비되지 않는다. 이러한 접근법의 이점은 Nginx로 증명되었다. Nginx는 수백만개의 동시 요청과 스케일을 무리없이 감당한다. 하지만 비동기, 이벤트 드리븐 방식도 문제가 존재한다. 바로 blocking이다. 안타깝게도 많은 서드파티 모듈들은 blocking call을 .. 2022. 8. 14. Process, Thread 프로세스는 사전적으로 '무엇인가 진행되고 있는 것'을 의미한다. 컴퓨터에서 프로세스는 실행중인 프로그램이다. 컴퓨터 프로그램은 프로그래밍 언어로 작성되고 컴파일 과정을 통해 object file(또는 실행 파일) 형태로 하드디스크에 저장된다. 즉, 프로그램은 목적코드로 작성된 하나의 파일이다. 이런 프로그램을 실행하기 위해 주기억장치에 적재하고 운영체제하의 관리 개체로 등록된다. 이 상태가 프로세스이다. 범용 컴퓨터에서는 여러개의 프로세스가 동시에 존재한다. 따라서 프로세스를 식별하고 관리하기 위해 다음과 같은 속성들이 필요하다. 1. PID(Process Identification Number) 새로운 프로세스가 생성될 때마다 운영체제는 고유한 식별 번호를 부여한다. 여기서의 고유함은 현재 실행 중인 .. 2022. 2. 3. Concurrent programming Concurrent software는 동시에 여러 작업을 할 수 있는 소프트웨어이다. 자바에서는 다음과 같은 concurrent programming을 지원한다 1. multi processing 2. multi thread 자바는 멀티쓰레딩을 설정하지 않는 한 기본적으로 main thread에서 동작한다. 자바에서 multi thread를 사용할려면 다음과 같은 방식을 사용하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class App { //클래스를 만들어서 사용하는 public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); S.. 2021. 11. 22. 이전 1 다음 728x90