IOT 7주차

강준호·2024년 4월 18일
0

IOT

목록 보기
8/13

I/O 멀티플렉싱 소개

잦은 프로세스 생성으로 인한 성능 저하, 구현의 복잡성, 프로세스 간 통신의 필요성 등 다중 프로세스 서버의 단점을 설명하는 것으로 시작합니다.
단일 프로세스가 다양한 소켓을 사용하여 여러 클라이언트를 처리하는 대안으로 I/O 멀티플렉싱을 도입합니다.

소켓 I/O 모델

블로킹 소켓과 비블로킹 소켓을 구별합니다:
소켓 차단은 소켓 작업이 해당 조건을 충족할 때까지 스레드 실행을 중지합니다.
비차단 소켓은 작업이 완료되지 않은 경우에도 소켓 함수 호출에서 반환되므로 스레드가 다른 코드를 계속 실행할 수 있습니다.

다중화 모델 개요

모델 선택:

select() 함수를 사용하여 여러 소켓을 관리합니다. 반복 호출의 필요성을 제거하여 비차단 소켓을 방지하여 차단을 처리할 수 있습니다.

epoll 모델:

특히 Linux에서 선택 모델에 대한 보다 효율적인 대안으로 제시됩니다. 사용자 공간이 아닌 커널에서 직접 이벤트 변경 사항을 추적하여 오버헤드를 줄입니다.

기능 선택:

선택 기능을 사용하는 단계는 다음과 같습니다.
파일 디스크립터 준비,
변경 사항 모니터링,
모니터링되는 설명자의 응답을 처리합니다.

멀티플렉싱 서버 구현:

select와 epoll을 이용하여 서버를 구현하는 단계로, 소켓 등록 및 모니터링, 연결 요청 처리, 데이터 처리에 중점을 둡니다.

소켓 I/O 모델 비교:


select, poll, epoll 비교:

  • Select 및 Poll은 더 간단하고 광범위한 OS 지원을 제공하지만 소켓 수가 증가하면 성능이 저하됩니다.
  • Epoll은 커널에서 소켓 상태를 관리하므로 성능이 뛰어나므로 빈번한 사용자 커널 전환의 필요성이 줄어듭니다.

실용적인 예:

epoll을 멀티스레딩과 함께 사용하여 데이터 처리 효율성을 향상시키는 방법을 보여주는 예제 구현 및 시나리오가 포함되어 있습니다.

세부 논의사항

성능 고려 사항: epoll이 각 검사와 관련된 오버헤드를 줄여 선택 또는 폴링보다 대규모 설명자 세트를 더 효율적으로 처리할 수 있는 방법에 대해 설명합니다.

Epoll 사용 사례

  • 이벤트 발생은 epoll 그 이후 데이터 처리 및 쓰기는 멀티쓰레드로 구현.

Level Triggered(메인) vs. Edge Triggered(서브)

Level Trigger

  • 왔는데 일부만 읽어와 => 그 다음번 epoll 할때 다시 이벤트를 발생시킴

Edge Trigger

  • 이벤트 하나에 대해발생

레벨 트리거됨
레벨 트리거됨 인터럽트 또는 알림은 신호 상태에 따라 활성화됩니다. 레벨 트리거되도록 장치를 설정하는 경우:

트리거링 조건이 충족되는 한, 즉 입력 신호가 특정 상태(하이 또는 로우)에 있는 한 응답합니다.
레벨 트리거링용으로 구성된 장치는 조건이 참인 한 입력에 계속 응답합니다. 이는 일정한 신호에 대한 지속적인 응답을 의미할 수 있으며, 이는 특정 상태에 대한 지속적인 주의가 필요한 시나리오에서 필요할 수 있습니다.
그러나 레벨 트리거링은 신호 상태가 빠르게 변경되지 않으면 단일 이벤트에 대한 여러 응답으로 이어질 수 있으며, 잠재적으로 시스템이 너무 많은 인터럽트로 범람하는 인터럽트 스톰과 같은 성능 문제로 이어질 수 있습니다.
엣지 트리거됨
반면에 에지 트리거 모드는 신호 상태가 낮은 상태에서 높은 상태로(상승 에지), 높은 상태에서 낮은 상태로(하강 에지) 또는 둘 다(임의의 에지)로 변경되어 활성화됩니다. 시스템이 에지 트리거로 설정된 경우:

신호 상태의 변화가 발생한 경우에만 응답합니다. 이는 버튼 누름 감지 또는 센서 출력 전환 감지와 같이 변경이 중요한 부분인 이벤트를 포착하는 데 특히 유용합니다.
에지 트리거링은 일반적으로 이벤트가 일시적이고 상태를 유지하기보다는 변경 자체만 캡처해야 하는 상황에 더 적합합니다.
이 접근 방식은 상태 자체가 아닌 상태 변경 시에만 활성화되므로 인터럽트 수를 줄이는 데 도움이 됩니다. 레벨 트리거 구성과 동일한 성능 문제가 발생할 가능성이 적습니다.
비교 및 ​​사용 사례
노이즈에 대한 민감도: 노이즈가 있는 신호가 지속적으로 인터럽트를 활성화할 수 있으므로 레벨 트리거 메커니즘은 노이즈에 더 민감할 수 있습니다. 에지 트리거 메커니즘은 일반적으로 안정적인 높음 또는 낮음 상태 동안 소음을 무시하고 전환에만 응답합니다.
애플리케이션 적합성: 레벨 트리거링은 전원 상태 모니터링과 같이 신호 상태를 지속적으로 모니터링하고 즉각적인 응답이 필요한 애플리케이션에 더 적합할 수 있습니다. 에지 트리거링은 사용자 입력 캡처 또는 통신 프로토콜 신호 처리와 같이 이벤트 발생이 지속 시간보다 더 중요한 이벤트 중심 애플리케이션에 유리합니다.
복잡성 및 리소스 사용: 에지 트리거링은 신호가 안정적인 상태에서 더 적은 수의 인터럽트를 처리하므로 CPU 시간 측면에서 리소스 집약도가 낮을 ​​수 있습니다. 그러나 짧은 기간의 신호가 누락되지 않도록 하려면 더 복잡한 처리 논리가 필요할 수 있습니다.


Select 사용

  • epoll의 성능 이점에도 불구하고 다양한 운영 체제 전반에서 단순성과 사용 용이성으로 인해 Select가 여전히 선호될 수 있는 특정 시나리오를 제공합니다.

고급 소켓 프로그래밍 기술: 이 문서에서는 epoll을 멀티스레딩과 함께 사용하여 광범위한 데이터 처리가 필요한 서비스의 성능을 최적화하는 등의 고급 소켓 프로그래밍 기술을 자세히 설명합니다.


lec15

다중 스레드 서버 소개:

다중 연결 서버는 여러 클라이언트에 동시 연결을 허용하여 한 번에 둘 이상의 클라이언트에 서비스를 제공하는 서버로 정의됩니다.

스레드의 이론적 이해:

프로세스 생성에 따른 높은 자원 비용, 프로세스 간 컨텍스트 전환으로 인한 성능 저하, 독립된 메모리 공간으로 인한 프로세스 간 데이터 공유의 어려움 등 스레드의 배경을 논의합니다.
스레드는 더 가볍고 동일한 프로세스 내에서 메모리를 공유할 수 있으므로 IPC(프로세스 간 통신) 메커니즘이 필요하지 않으므로 데이터 공유가 단순화되고 컨텍스트 전환 오버헤드가 줄어듭니다.

스레드 생성 및 실행:

스레드 라이브러리를 연결하는 방법과 처리를 위해 pthread_join 함수를 사용하는 것의 중요성을 포함하여 프로그래밍 컨텍스트에서 스레드가 생성되고 관리되는 방법을 보여주는 실용적인 코딩 예제(예: thread1.c 및 thread2.c)를 제공합니다. 스레드 종료가 올바르게 완료되었습니다.

스레드 안전 및 중요 섹션:

스레드 안전 함수와 스레드 안전하지 않은 함수를 구별하고 _REENTRANT와 같은 매크로를 통해 스레드 안전하지 않은 함수를 안전하게 만드는 기술을 소개합니다.
여러 스레드의 동시 액세스로 인해 경쟁 조건이 발생할 수 있는 중요한 섹션과 액세스를 동기화하기 위해 뮤텍스, 스핀록 또는 세마포를 사용하여 이러한 상황을 완화할 수 있는 방법에 대해 설명합니다.

동기화 기술:

뮤텍스

  • 초기값은 1. 락 잠구면 0.
  • 0이면 대기야.

세마포어

  • 넘어감

동기화를 위한 뮤텍스 및 세마포어 사용에 대해 자세히 설명하고, 경합 조건을 방지하고 질서 있는 실행을 보장하기 위해 여러 스레드에서 공유 리소스에 대한 액세스를 관리하는 데 어떻게 도움이 되는지 설명합니다.

다중 스레드 서버 구현:

  • 공유 변수를 위해 lock 을 거는것.

여러 클라이언트 연결을 동시에 처리하기 위해 스레드를 활용하는 서버의 구조적 설계에 대해 설명합니다. 여기에는 스레드를 사용하여 서버 애플리케이션에서 개별 클라이언트 요청을 관리하는 방법을 보여주는 코드 조각이 포함되어 있습니다(예: chat_server.c).

멀티 스레드 애플리케이션의 과제:

동기화 문제, 경쟁 조건 및 스레드 종료의 적절한 관리와 같은 멀티스레딩의 잠재적 위험을 강조합니다.

요약 및 실제적 의미
이 문서는 TCP/IP 소켓 프로그래밍의 맥락에서 다중 스레드 서버를 이해하고 구현하는 데 대한 포괄적인 가이드입니다. 스레딩의 이론적 측면, 스레드 관리의 실제 예, 동기화 및 경쟁 조건과 같은 고급 주제를 다룹니다. 이는 여러 동시 연결을 효율적으로 처리하는 것이 중요한 네트워크 애플리케이션에서 작업하는 개발자에게 귀중한 리소스입니다.

0개의 댓글

관련 채용 정보