English | 한국어
시스템 목차 | 이전: 시스템 개요 | 다음: Threading model
Core runtime architecture¶
이 장이 정의하는 것 — Public C API에서 I/O thread까지 message가 지나가는 내부 구성요소와 그 경계.
1. Core runtime 개요¶
Core는 raw socket runtime이다. Public C API는 socket — message를 주고받는 endpoint — 의 구현으로 진입하고, socket 구현은 thread 경계를 넘어 command를 전달하는 mailbox와 message를 전달하는 pipe를 통해 I/O thread — 네트워크 송수신을 실제로 처리하는 background thread — object와 command 및 message를 교환한다.
구성요소는 다음 계층으로 쌓인다.
+------------------------------------------------------+
| Public C API |
+------------------------------------------------------+
| Socket patterns and eventing |
+------------------------------------------------------+
| Context, socket base, sessions, pipes, mailboxes |
+------------------------------------------------------+
| ZMP or raw engines |
+------------------------------------------------------+
| TCP, IPC, inproc, WebSocket, TLS transports |
+------------------------------------------------------+
이 문서는 이 구성요소들의 내부 구조만 서술한다(구현 서술 — 구현이 바뀌면 이 문서를 코드에 맞춘다). 대상 독자는 Core 유지보수자다. 각 구성요소가 밖으로 드러내는 공개 계약은 이 문서가 아니라 다음 문서가 소유한다.
| 관련 계약 | 정의하는 문서 |
|---|---|
| Core가 raw socket runtime으로만 유지하는 책임 경계 | Runtime Boundary |
| Context 수명과 옵션 | Context |
| socket 생성·옵션·송수신 | Socket 공통 |
| socket monitor 계약 | Monitoring |
| poller·timer 등 utilities | Utilities |
2. Context와 thread¶
Context는 I/O thread와 socket을 담는 최상위 container다. 그
구현인 ctx_t는 socket slot, I/O thread, 닫힌 socket의 마무리 정리를 전담하는 reaper
thread, endpoint registry와 내부 monitor queue 전달·Auto HWM 재계산을 실행하는 context별
generic control runtime을 소유한다. Generic timer는 process 전역 timer scheduler가 관리한다.
Socket close는 termination command를 보내고 소유한 object가 자원을 해제할 때까지 기다린다.
3. Socket과 session 경로¶
socket_base_t는 public socket state와 pattern별 동작을 소유한다. Session은 transport
connection 하나를 나타내는 내부 object다. Pipe는 multipart 순서를 유지하면서 socket
thread와 session/engine object 사이에서 message를 전달한다.
4. Engine과 transport¶
Asio engine은 비동기 read와 write를 제출하고 completion callback을 받는다. ZMP engine은 zlink message frame을 인코딩하고 raw engine은 byte-stream payload를 전달한다. Transport class는 endpoint parsing, connection 설정과 운영체제 I/O를 처리한다.
5. Eventing¶
Poller는 socket, file descriptor와 generic timer readiness를 한 곳에서 통합한다. Socket
monitor는 raw transport와 protocol 전이를 관찰한다. Control runtime은 socket I/O thread
밖에서 내부 monitor queue 전달과 Auto HWM 재계산을 실행한다. Generic timer scheduler는
만료 횟수를 queue에 기록하며 application은 zlink_timer_recv()로 그 값을 받는다.