본문 바로가기
일상,취미

다시 시작하는 TIL 23일차

by 진득한진드기 2024. 7. 8.

오늘 한일

오늘은 윈도우 화면 구성하는거만 주구장창 만지고 발표자료 준비하는걸 하루종일 했는데

 

윈도우에서 화면을 구성할 때 프로젝트 자체가 시작할 때 초기화 때 이미 화면에 대한 메모리와 자원들을 할당해놓는다.

 

그리고 그거를 단지 보여주는 식의 구조이기 때문에 메모리가 할당되었는지 아닌지 체크하는건 생각보다 무의미하다는 것을 오늘 느꼈다.

 

알려주는 사람이 없으니;; 코드 파헤져보다가 오늘 깨달았다.

 

직접 그 상황에 맞춰서 화면 자원을 할당해야되는 건줄알고 관리를 위한 화면 관리용 List를 구현한다던지 이런 삽집을 괜히 한듯한......

 

그래도 결국 한 이벤트로 인해서 다중 화면을 구성할 떄는 기존 자원을 복사해서 사용해야하니 라이브러리화만 해놓으면 쓸만할거 같기는하다.

 

그리고 ui 구성은 죽었다 깨어나도 안할줄 알았는데 또 시키니까 하게되는건 국룰인거 같기도하다. 

 

원격으로 터치하는 api만들어놓은것도 발표자료로 만들어 놔야하는데 시간이 3일 밖에 안남아서 부랴부랴 만드는중이다.

 

내일 아마 눈치보면서 만들어야 할듯한데......

 

전에는 안그랬는데 요즘 회사에서 일이 계속 생겨 완벽하게 일처리를 끝내지 못하는 느낌이 든다......

 

퇴근 후 공부

 

Nagle 알고리즘

 

인터넷의 과도한 트래픽과 그로 인한 전송속도의 저하를 막기 위해서 디자인된 알고리즘이 nagle 알고리즘이다.
이러한 nagle 알고리즘은 그 목적이 명확한 경우가 아니면 중단하지 말아야하며, 소켓은 기본적으로 nagle 알고리즘을 적용해서 데이터를 송수신한다.

Nagle 알고리즘은 앞서 전송한 데이터에 대한 ACK 메시지를 받아야만, 다음 데이터를 전송하는 알고리즘이다.

응용계층에서 TCP로 데이터를 밀고 TCP에서 IP계층 으로 민다.

IP 계층에서는 TCP헤더가 붙어오고 그 아래계층은 IP헤더와 TCP헤더가 붙어서 점점 커진다.

그래서 1바이트만 보내도 헤더들이 붙어서 웬만하면 데이터를 묶어서 보내는게 현명하다.

이 행동을 지향하는게 Nagle 알고리즘이다.

호스트 A에 출력버퍼에 Nagle이라는 문자가 들어온다고 가정하면

웬만해서는 모아서 보내고 싶은데 급해서 N만 먼저 보내버리면 agle이 출력버퍼에 남는다.  

 

 다시 바로 출력버퍼를 보내서 agle를 보낼 수 있지만 

상대의 ACK 메시지가 올 때 까지 기다린다.


기다리는 이유


ACK가 올때까지 출력버퍼에 데이터가 더 들어올 수도 있기 때문에

그때까지 모아서 보내는 것이다.

Nagle알고리즘 없이 한글자 씩 보내버린다고 하면 ACK와 상관없이 데이터를 보낸다.

ACK도 묶어서 보낼수있지만

그러지 않는다고 하면 ACK메시지를 신경쓰지 않고 데이터를 보냈다고 하면 속도가 더 빨라질수도 있기도 하다. 중요한건 응답이 올때까지 기다리지 않았다는것
언뜻보면 속도가 빠른것처럼 보이는데 용량이 크다면 실제로 더 눈에 두드러지게 빠르기도 하다.

Nagle알고리즘을 신경쓰지 않을때가 있긴하다. UDP 쓰고 싶은경우 ACK 안받고 보내고 싶다. 하지만 전송이 잘갔는지 확인이 안되기 때문에 데이터가 잘 보냈는지 확인은 하고 싶고 ACK를 받지 않고 빠르게 보내고 싶다 하면 Nagle 알고리즘을 끌 수 있다.


Nagle 알고리즘의 중단


Nagle 알고리즘 명령 중단 코드 

 

int opt_val = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void P)&opt_val, sizeof(opt_val));

 

Nagle 알고리즘의 설정상태 확인하는 코드

int opt_val;
socklen_t opt_len;
opt_len = sizeof(opt_val);
getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void p)&opt_val, &opt_len);



기본적으로 default값은 Nagle 알고리즘이 들어가 있기 때문에 따로 set,get에 TCP_NODELAY를 넣어줘야한다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 25일차  (0) 2024.07.12
다시 시작하는 TIL 24일차  (0) 2024.07.10
다시 시작하는 TIL 22일차  (0) 2024.07.06
다시 시작하는 TIL 21일차  (0) 2024.07.05
다시 시작하는 TIL 20일차  (0) 2024.07.04