목록2025/05/06 (2)
빙응의 공부 블로그

📝서론 이제까지 쓰레드를 중심으로 병행 프로그램을 설명하였다. 인터넷 서버에서는 다른 스타일로 병행 프로그래밍을 하기도 한다. 이런 스타일을 이벤트 기반의 병행성이라고 부른다.예를 들어보면 node.js나 스프링의 WebFlux 같은 것들이다. 물론 시작점은 C와 유닉스 시스템이다. 핵심 질문 : 어떻게 스레드 없이 병행 서버를 개발할까? 📝기본 개념 : 이벤트 루프우리가 다룰 이벤트 기반 병행성은 특정 사건(이벤트)의 발생을 대기한다. 즉 사건이 발생하면, 사건의 종류를 파악한 후 I/O를 요청하고 추후 처리를 위해 다른 이벤트를 발생시킨다. 이게 전부다. 이제 이벤트 루프에 대해 알아보자while (1) { events = getEvents(); for (e in events) { proce..

📝서론 우리는 그동안 교착 상태에 초점을 맞춰서 오류를 해결했다.핵심 질문 : 일반적인 병행성 관련 오류들은 어떻게 처리하는가? 📝비 교착 상태 오류 원자성 위반 오류 "다수의 메모리 참조 연산들 간에 있어 예상했던 직렬성이 보장되지 않았다." 즉 코드의 일부에 원자성이 요구되었으나, 실행 시에 그 원자성이 위반되었다는 오류이다. 해결방법은 간단하게도, 락을 추가하여 원자성이 보장되어야 하는 부분에 락 변수를 획득하도록 하면 된다. 순서 위반 오류 "두 개의(그룹의) 메모리 참조 간의 순서가 바뀌었다."즉, A가 항상 B보다 먼저 실행되어야 하지만 실행 중에 그 순서가 지켜지지 않았다.해결방법은 또한 간단하다. 순서를 강제하면 된다. 컨디션 변수를 사용하면 된다. 📝교착 상태 오류 앞서 다룬 병..