10월 15일 화요일
AM 알고리즘 특강 청강
PM 5주차 강의 수강 및 Web 특강 청강
어제 계산기 과제 lv2까지 진행하다가 12시가 넘어버려서 TIL을 쓰지못했다..
시간 분배를 잘 해야겠다.
4주차 강의를 넘어 온 후로 듣는 문법들이 조금씩 어려워진다고 생각이 들었다.
문법을 배우면서 어떤 상황에서 써야 적합한지를 알아야된다고 생각하는데 현재는 그정도까지는 못하는 수준인것 같다.
싱글스레드
말 그래도 프로세스 안에서 하나의 쓰레드를 실행하냐 여러개의 쓰레드를 실행하냐로 나뉜다.
Java의 경우 main()메서드만 실행시킬 때 싱글 쓰레드라고 하고 '메인쓰레드' 라고 부른다👍 장점
- 단순히 CPU만을 사용하는 계산작업이라면, 오히려 멀티스레드보다 싱글스레드로 프로그래밍하는 것이 더 효율적이다.
- 문맥 교환 작업을 요구하지 않는다.(문맥 교환은 여러 개의 프로세스가 하나의 프로세스를 공유할 때 발생하는 작업으로 많은 비용을 필요로 한다. )
👎 단점
- 여러 개의 CPU를 활용하지 못한다.
- 연산량이 많은 작업을 하는 경우, 그 작업이 완료되어야 다른 작업을 수행할 수 있다.
- 싱글 스레드 모델은 에러 처리를 못하는 경우 멈춘다.
멀티스레드
하나의 프로세스는 여러 개의 쓰레드를 가질 수 있으며 이 쓰레드들은 프로세스의 자원을 공유합니다. 또한 여러 개의 실행 흐름을 만들 수 있습니다.
👍 장점
- 여러 개의 작업을 동시에 할 수 있어서 성능이 좋아집니다.
- 스택 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 효율적으로 사용할 수 있습니다.
- 비동기 방식으로 실행됩니다.
👎 단점
- 동기화 문제가 발생할 수 있습니다.(프로세스의 자원을 공유하면서 작업을 하기 때문에 자원을 서로 이용하려고 하는 충돌이 발생할 수 있습니다.)
- 멀티 스레드 모델은 프로그래밍 난이도가 높고 스레드 수만큼 자원을 많이 사용한다.
Web 특강 중 QUIC 프로토콜이 어떻게 UDP에서의 데이터 유실을 대처하는지에 대한 얘기가 나왔는데 궁금해서 찾아보았다.
QUIC은 Quick UDP Internet Connection의 약자였지만 현재는 구글에서 고유명사로 지정하고 사용되고 있다.
TCP방식에는 무결성을 전제조건으로 만들어진 프로토콜이기에 데이터 유실을 막기 위해 전송 성공 여부를 계속해서 확인합니다.
위와 같은 특성상 물리적 거리에 비례해 지연시간이 늘어나는 것을 RTT(Round Trip Time)라고 하고 TCP 기반에서 연결을 수립할 때 3-way-HandShake 과정이 필요하고 암호화를 위해 TLS를 적용한다면 통신이전에 연결 수립을 위해 약 4.5RTT가 발생합니다.
하지만 QUIC은 Zero RTT가 핵심으로 다른 프로토콜에 비해 가볍고 성능, 보안성을 모두 고려해 설계했으며, 암호화된 전송을 통해 다중화된 스트림을 제공하는 UDP 기반 전송 프로토콜입니다.
이러한 QUIC에서 손실 감지 및 복구, 혼잡제어 방식은 TCP에서 수행하는 기능과 유사하게 동작합니다. QUIC에서 송신 측이 전송한 패킷이 손실되었는지 파악하기 위해서는 ack정보와 time-out정보를 이용합니다.
더는 내용이 너무 길어져서 밑에 관련자료를 첨부하겠습니다..