[TIL] 221025 Nginx, XOR swap

신현철·2022년 10월 26일
2

TIL

목록 보기
1/5

오늘부터 나도 TIL 시작...!


💡Nginx 비동기처리

우선 Apache는 서버에 들어온 요청들에 대해 멀티 프로세싱 또는 멀티 쓰레딩으로 처리한다. 이는 곧 트래픽의 증가가 리소스 점유 증가로 이어져서 성능 이슈와 관련있게된다.

반면 Nginx는 서버로의 요청에 대해 Event-driven 방식으로 비동기 처리를 한다. 요청들은 concurrency하게 처리되며, 요청 증가로 인해 발생하는 과도한 context switching 비용도 없다. 즉 여러 커넥션을 하나의 event handler 프로세스가 비동기 방식으로 처리한다. 비동기 방식으로 처리한다는 것은 여러 커넥션 중 먼저 완료되는 것부터 그 다음 로직이 수행된다는 의미이다.

Nginx는 Master process 하나가 여러 Worker process를 관리하는 방식으로 동작한다. 이 worker process의 갯수를 nginx.conf에서 설정해주면 된다. auto로 놓을 경우 정의된 개수와 CPU 환경에 따라 자동 조정된다.

//worker process의 수
worker_process 1;


events{
	//worker process가 처리하는 커넥션 수
	worker_connections 1024;
}

💡XOR in-place swap

간혹 두 변수나 배열 안에서 추가적인 메모리를 사용하지 않고 swap을 하라는 경우가 있을 수 있다.

이럴 경우 다음과 같이 bitwise XOR 연산을 3회 수행하면 된다.

x = x XOR y
y = x XOR y
x = x XOR y

C/C++로 xor swap 함수를 구현해보면 다음과 같다.

void swap(int *x, int *y){
	if(x == y) return;
    
	*x ^= *y;
    *y ^= *x;
    *x ^= *y;
}

A라는 수에 B라는 수를 XOR 연산을 두 번하게 되는 경우 원래 수 A로 돌아가게되는 원리를 이용하는 것이다.

profile
DB는 두부

3개의 댓글

comment-user-thumbnail
2022년 10월 26일

신기하네요 :)

1개의 답글
comment-user-thumbnail
2022년 10월 31일

열심히 공부하는 모습이 참 보기 좋네요^^

답글 달기