주말 아침 #64

일반

기술 능력을 키우는 새로운 방법 발표: Microsoft Learn에서 제공하는 30일 플랜 | Phil Evans

.NET / C#

제안된 C# 유형 공용체는 무엇이며 차별된 공용체와 어떤 관련이 있나요? | Peter Ritchie

Data API Builder와 EF Core Power Tools를 사용하여 몇 분 안에 CRUD 웹 API 만들기 | Erik Ejlskov Jensen

async2 - .NET 런타임 비동기 실험이 종료되었습니다. | Steven Giesel

.NET의 Wolverine 라이브러리 소개 | Konstantinos Polychronopoulos

크로스플랫폼

Avalonia UI - 디자인 타임 데이터를 사용하는 방법

DB

알아야 할 EF 핵심 기능 5가지 | Milan Jovanović

클라우드

여러 개의 Docker 이미지를 하나의 다중 아키텍처 이미지로 결합 | Andrew Lock

Windows에서 ARM64용 Docker 다중 아키텍처 이미지 생성 | Andrew Lock

AI

왜 ML.NET을 사용하나요? | Matt Eland

C#으로 ChatGPT와 같은 대규모 언어 모델(LLM)을 로컬에서 실행 | Alvaro Montoya

릴리스

.NET 9가 포함된 Visual Studio 2022 v17.12의 첫 번째 미리 보기 | Mads Kristensen

JetBrains Rider용 Uno Platform Solution Template Wizard 발표 | Uno Platform Team

https://platform.uno/blog/announcing-uno-platform-solution-template-wizard-for-jetbrains-rider/

Windows App SDK - v1.6.0-미리보기1

행사

.NET Conf 2024 - .NET 9 출시를 기념하는 행사! - 날짜를 저장하세요! | Mehul Harry

링크

.NET 9 Preview 7의 ASP.NET Core 업데이트

Humanizer - 휴머나이저는 문자열, 열거형, 날짜, 시간, 기간, 숫자 및 수량을 조작하고 표시하는 데 필요한 모든 .NET 요구 사항을 충족합니다.

5개의 좋아요

async/await 키워드 나올때
팀 컨벤션으로 비동기 코드 작성 금지가 생겼었죠.
wpf 버튼 클릭하면 reentrant 처리 안되있어서 여러번 눌리고

지금은 nodejs의 경우 기본기로 사용해서 정말 세상이 무섭게 변한다는 생각이 드는군요.

고루틴이나 Virtual Thread에 대응할 기술에 대한 실험이 이어지고 있나보네요

Green threads are also known as “coroutines” or “fibers” in other programming languages.

이 글에 보면 위와 같은 문장이 있는데, 왜 코루틴이라고 표현하신건지 모르겠군요.

다른 언어는 언어 레벨에서 지원하는 코루틴이라는 게 따로 있는건가…

다른 언어는 경험이 없어서 정확히 그린스레드 라는 게 뭔지는 모르지만 코루틴은 제가 알기론 멀티코어가 등장하기 전부터 그 역사가 매우 오래되었고, .NET에서도 이미 async/await 개념 자체는 코루틴인거로 아는데 말이죠.

.NET은 네이티브 스레드만 있는걸로 아는데 개념이 두개가 충돌나서 뇌절이 오네요.

그린 스레드는 운영 체제가 아닌 런타임 라이브러리 또는 가상 머신(VM)에서 관리하는 사용자 공간 스레드입니다.

누가 이거 해석좀 해주세요…영어를 해석 한건데 왜 이해가 안되죠 ㅠㅠ

저도 앞서 말씀드린대로, 다른 언어를 해본 경험이 없어서 그린 스레드를 잘 모릅니다.

그러나 뭔가…뉘앙스나 맥락이 운영체제의 네이티브 스레드가 아니라 어플리케이션 단에서 지원되는 스레드라고 이해가 됩니다.

그런데 사실 그게 코루틴이 맞긴합니다.

코루틴은 어플리케이션 단에서 비동기로 함수를 정지/재시작 할 수 있는 기능이기 때문에 사실 스레드와 관련은 없는 기능이거든요.

그리고 코루틴은 좀 찾아보니 제가 오래되었다고만 써놨는데 1958년도에 처음 탄생한 용어로서, 스레드가 있기 전부터 있던 개념이 맞습니다.

프로세스의 힙 영역을 코루틴의 Stack으로 사용하면서 함수의 일시정지/재시작을 지원하는 기능인데 결국 코루틴을 사용하면 스레드 1개에서만 동작하는 것은 맞기때문에 멀티코어에서는 코루틴만 쓰면 CPU 코어의 모든 기능을 사용하지 못하는 것은 맞습니다.

그래서 코루틴+스레드를 함께 사용하는 모델이 지금 .NET의 TAP라고 알고 있습니다. await가 호출된 시점에서 잠시 정지했다가 await로 반환받고 다시 그 이후로 코드를 진행시킬 수 있다는 부분 때문에 코루틴이라고 이해하고 있습니다.

await가 돌면서 내부적으로 스레드풀에서 스레드를 할당하는 것은 코루틴 이후의 개념인 것이지요

Task를 뜯어보시면 알겠지만 Task는 Thread 자체가 아니며, Task라는 작업의 단위를 스레드 스케쥴러에 이관하여 스레드풀에서 할당하여 돌아가는 형태인데 코루틴이 reactor pattern(리엑터 패턴)을 구현했다라고 불리는 것과 비슷한 형태이므로 저는 그렇게 보고 있는 것입니다.

그래서 제가 이해하기로는 이미 .NET에는 코루틴과 네이티브 스레드개념이 복합적으로 들어있는게 맞는데 글쓴이 분께서 그린스레드가 코루틴이라고 하는 것이 이해가 서로 충돌하는 부분인 것입니다.

아 여기 이거 제 댓글에 대한 표시 때문에 제가 무슨 말을 한건지 이해가 안되셔서 제 댓글에 대한 해석을 써놓은 것인데 제 댓글에 대한 의도를 물어보신 게 아니군요?

코루틴을 ‘사용자 공간 스레드’ 라고 부르긴 합니다.

그냥 네이티브 스레드를 쪼개서 더 CPU 시간을 조금씩 더 작은 단위로 사용할 수 있는 개념으로 알고 있습니다.

근데 '스레드’라는 이름이 붙은 게 좀 에바 아닌가 하네요 개인적으로는…;