io 사이클 외부에서 비동기 처리 순서는 프로세스가 언제 마무리되느냐를 따른다. (대략적으로 바닐라 js랑 비동기 처리랑 같은 걸로 이해함)
io 사이클 내부에서 이벤트 루프는 여러 개의 페이즈가 있고 그 페이즈마다 각각 콜백큐를 가지고 있으며 페이즈가 끝나면 다음 페이즈 업무를 진행하고 이걸 전부 실행한 한 사이클을 틱이라고 한다..... 대충 이렇게 강의에서 봤는데
io사이클이 정의가 정확히 뭐임? 검색해서 나오는 내용들은 뭔소린지 모르겠는 말만 나오고 대충 어디 콜백 내부 비동기 메소드 내부 이런걸 의미하는걸 알겠는데..
input output이 발생하는 사이클을 말하는거면 비동기 함수가 아니어도 io사이클이 될수 있는거임?
비동기로 처리해아하는건 대부분 i/o (network i/o, data i/o, hardware i/o 등..) 그런것들의 응답이 계속 들어왔나 체크해주는 i/o 사이클 (epoll)같은걸 말하나보지 머. 근데 쓴거보니까 epoll같은 레벨보다는 io 처리 과정자체를 말하는것같은데 어느강의에서 봄?
유데미에서 들은 강의인데 이벤트 루프부터 뭔소린지 하나도 모르겠음 내가 알던 원래 콜백큐 마이크로태스크 큐 쓰는 바닐라js 이벤트 루프랑 nodejs 이벤트루프랑 같은건지 다른건지도 모르겠고
공식 문서에서도 i/o 사이클이라면서 이벤트 루프 설명하는데 그게 정확히 뭔지는 설명 안해주더라고 구글링 해보면 os쪽 설명만 나오던데
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout
강의도 알려줄 수 있엉?
유료라서 알려줘도 어차피 못보긴 하는데 이거임
https://www.udemy.com/course/nodejs-express-mongodb-bootcamp/?utm_source=adwords&utm_medium=udemyads&utm_campaign=WebDevelopment_v.PROF_la.EN_cc.ROW_ti.8322&utm_content=deal4584&utm_term=_._ag_8038573
사실 커찮아서 node.js 문서 안보고있었는데 꽤 자세하게 설명되어있네 덕분에 한번 읽어봐야겠다
i/o polling 관련된 동작을 하는 함수 스코프 내에서는 비동기 정보 처리를 위해서 nodejs의 이벤트 루트로 정보를 처리하고 이 i/o polling이 이루어지는 환경을 i/o 사이클이라고 한다는건가요? 탑레벨에서는 그럴 필요가 없으니까 일반적인 js 이벤트 루프 방식을 따르고? 정확히 이해한건지 모르겠네요..?
저 문서에서의 I/O CYLCE은 poll phase를 작동시키는 요소같음 ㅇㅇ.
file i/o, network i/o 같은
한 5시간 동안 이게 뭔지 찾고 있었는데 역시 가능하면 질답받는게 제일 빠르네요 감사합니다!
넹 왜곡된 설명이 있는것같아 기존 덧글은 지웠습니다~ 근데 poll phase의 동작이 좀 아리송하네요 ㅇㅇ setTimeout 0 으로 진행되면 timer phase에서 먼저 실행처리를 시키는게 아닌가 싶었는데
강의에서 하이레벨로만 보면 (first tick) 2 3 4 5 6 (next tick) 1 2 3 4 5 6 ... 이런식으로 페이즈가 진행된다고 하더라고요? 그래서 setImmediate가 먼저 실행된다고. 로우레벨은 기초 수준에서 안중요하다고 왜 그런지는 자세히 말 안하더라고요
그러게 뭔가 스킵되는게 있나보구나.. 문서상으로 읽었을 때 이해한 내용은.. > timer phase(setTimeout)으로 설정한 callback이 어느시점에서 실행되어야 하긴 하는데.. poll queue가 비어있을때/ 비어있지 않을 때(within i/o cycle).. 모든케이스에서 동작이 일관적으로 비결정적/결정적인게 정상 아닌가 싶었음..
1. timer phases에서 0ms를 보고 현재 실행하지 않고 다음 틱으로 넘김 2. poll phase에서 setImmediate를 만났음 근데 여기서는 poll queue가 없으므로 바로 check phase로 넘겨서 callback을 실행할 준비를 함. 3. check phase에서는 setImmediate의 callback을 실행할텐데.. 왜 어떤 경우에서는 setTimeout callback이 바로 실행되는거지..?
timer는 별도의 내부 로직으로 timer callback으로 시간 임계점이 넘으면 바로 실행시키는것같은데.. poll phase처럼 프로세스를 block시키지 않는이상 계속 시스템이 timer callback이 실행되도 되는 시점인지 체크하나보네..
그래서 어느 환경에서는 poll phase를 빠져나간 시점에 스케줄러가 timer callback을 실행하는 경우도 있겠꾸만..
엥 그러면 왜 file I/O가 있는 경우에도 setTimeOut과 Setmmediate는 non-deterministic해야되는거아닌가. (
https://blog.insiderattack.net/timers-immediates-and-process-nexttick-nodejs-event-loop-part-2-2c53fd511bb3
여기
이유가 나와있긴 한데.. 레퍼체크좀 해야할듯...ㅠ 아니면 node 문서가 설명이 부실한건가...;