그냥 비동기로 실행되는 경량스레드니 뭐니 라고만 이해하고 있는데
이런 경량 스레드들은 결국엔 실제 스레드에 연결되어야하니까 어느정도 스레드를 생성해두고 내부적인 스케쥴러도 추가 스레드로 돌아가면서 스케줄링에 따라 실제 스레드에 꼬라박는거라고 생각하면 되나요?
공룡책도 단순히 OS 스레드와 매칭되는 경량 스레드 이런식으로 서술 되어 있어서 실제 언어들은 대체 어떻게 비동기 기능들을 제공하는지 넘나 궁금함
블로그 글들도 너무 뭉뚱그려서 언급하는 것 같아요
- dc official App
다 알고있네요 - dc App
그럼 C# 기준으로 그냥 스레드풀 더 편하게 사용할 방법 제공했다고 보는게 편하겠네 - dc App
스레드풀을 그 언어에서 제공하는 비동기 모델로 쓴거 - dc App
근데 결국 미리 스레드를 만들어 놓는 다는 개념자체가 스레드풀을 쓴다는 말이나 마찬가지 아님? 작업큐 세워놓고 큐에서 미리생성한 스레드들이 스케줄링따라 하나하나 빼먹어서 돌리는거잖아 - dc App
싱글스레드애서도 할 수 있음 - dc App
난 그 개념이 너무 이해안됨 메인스레드에서 비동기 작업 실행하면 비동기 돌릴 워커 스레드가 싱글스레드라는 뜻이지? 메인스레드는 따로고 - dc App
async모델은 그낭 언어의 모양세고 안에서 돌아가는건 런타임 만든사람 맘대로 - dc App
보통 프로그램 시작점이랑 이벤트 루프를 메인스레드에 물려놓고 스레드풀을 워커로 쓰면서 작업 물리기 + 별도의 async io 폴링 처리 - dc App
나도 이런 거 엄청 궁금했었는데 비동기는 세부 동작보다는 동시에 두가지 일이라는 것 자체에 의미를 두는 게 맞음. 비동기 자체는 구체적인 구현 방법을 포함하고 있지 않아 동시에 두가지 이상의 일에 초점이 맞춰진거지.
iocp, epoll
system call 단계까지 봐야하는구나 함볼게요 - dc App
나도 c#의 비동기가 어떻게 작동하는지 궁금해서 막찾아봤는데
닷넷에서 제공하는 비동기 api들은 스레드풀 wrapper이 대부분, io관련api는 스레드풀이 아닌 진짜 os의 비동기 api를 호출
비동기작업이끝나면 os에서 닷넷런타임에다가 작업이 끝났다는걸 알리고 Task의 상태가 completed가 됨. await키워드는 겉보기에는 Task가 completed될때까지 스레드에서 기다리는것처럼 보이지만 사실은 await이후 코드를 continueWith으로 연결한거임
내가설명하니까 정말 개같이못설명한다. C# synchronizationcontext 같은거 찾아보셈
와 ㄹㅇ? vm이 await 이후 코드들 싹다 continueWith로 넣어버리는거구나
ㅇㅇ continueWith 안에 내용을 실행할스레드는 SynchronizationContext에 의해 결정되는거고
고언어 경량스레드는 고루틴 아님? 채널은 고루틴간에 데이터전달로 쓰임 . 그냥 유저레벨 스레드라고 생각하면 델듯 스레드 하나 할당해서 가상스레드 수십개 만들고 스택크기를 작게하고 컨텍스트 스위칭 직접 구현
패션 개발자들이 바람넣는 강의들 많이 싸질러놔서 그럼