왜 파이프 1프로세스 멀티쓰레드 상황이나

1쓰레드 안에서 자기 자신한테 비동기로 보내는 상황이나 이런거 안하는거야?



가 요지고


복붙 하나만 할게



파이프 이론상 자기 자신과 연결될수도 있는거 아니야?

그거 그리고 여럿이서 공유도 가능한거같던데



그냥 파일디스크립터 두개 나오는거


아무렇게나 나눠가져서


읽기쪽에서 읽을사람 쓰고

쓰기쪽에서 쓸 사람 쓰면 되잖아



자기 자신한테도 쓰고, 멀티쓰레드에서도 쓸 수 있는거잖아



보니까 이 용도로 쓰라고 메세지 큐가 있는거 같던데

파이프는 왜 이 용도로 쓰면 안됨?


내가 메세지큐 잘 모르긴 함


그리고 이 문제의 핵심 착안은 뭐였냐면


어떤 한 함수에서 이벤트를 발생시키고

다른 한 스레드(혹은 비동기함수)에서 이벤트를 기다리다가 실행하면 되겠다


그 자바스크립트 promise.resolve 라던가 Event dispatch인가 그거를 간편하게 자바에서 구현해보고 싶다는 생각이 들어서(어디까지나 그냥 개발공상이지 실제 개발용도로 생각하는건 아님)


그러면서 또 남들한테 이벤트 발생시키는건 소켓에 read/write 걸면 되니까 쉬운데

자기 자신한테 이벤트 거는건 어떻게 가능할까?


뭐 이런 생각에서 출발했음.



그래서 지금 내가 그냥 아무렇게나 내 아는지식으로 휘갈기면

그냥 파이프 하나 파고


멀티쓰레드일경우엔 한쓰레드 파서 파이프 하나에 반복문으로 read 걸면 될거고

비동기 1쓰레드일 경우, 즉 아예 자기 자신 쓰레드에다가 이벤트 발생시키는 경우에는 이거는 시그널 가야하는거같고, (인터럽트를 발생시킬순 없을테니)

이제 자바스크립트처럼 1쓰레드이지만 이벤트루프라는 개념이 존재하는 경우에는 (그 이벤트 루프가 인터럽트 기반의 1쓰레드이건 멀티쓰레드이건)

이벤트루프가 epoll로 깨어나면 되겠군



이라고 결론지었어



내 공상 좀 발전시켜주라.


(1) 너희라면 자바 혹은 C로 자바스크립트의 이벤트 발생 혹은 promise.resolve로 원샷 만드는거 어떻게 할래?

(2) 혹시 이런거 전문으로 하는게 메세지 큐니? 나 메세지큐 전혀 몰라. 카프카 뭔지도 모름