(C#) TPL Dataflow 라이브러리

.NET 공식(?) 라이브러리중 데이터 병렬 처리를 다룰 수 있도록 제공하는 Dataflow Task 라이브러리가 있습니다. (TPL Dataflow 라이브러리) TPL Dataflow는 .NET 기본 API에 포함되지 않고 NuGet 패키지로 설치해서 사용할 수 있습니다. NuGet - System.Threading.Tasks.Dataflow TPL Dataflow MS Doc 이번 글에선 TPL Dataflow에서 제공하는 System.Threading.Tasks.Dataflow.BroadcastBlock<T> 클래스에 대해 알아보고 간단한 샘플 예제를 작성해 보겠습니다.

더보기

(C#) 작업 대기열 구현 Channels사용

.NET Core 3.0부터 포함 API로 제공되는 System.Threading.Channels.Channel<T> 클래스에 대해 알아보도록 하겠습니다. System.Threading.Channels.Channel<T> 클래스는 비동기 작업에서 메세지 처리를 스레드로 부터 안전하게 처리할 수 있도록 간편한 방식으로 작업 대기열을 구성할 수 있도록 제공합니다. 참고로 .NEY Core 3.0 이전 버전에서는 NuGet 패키지를 통해 사용해볼 수 있습니다. NuGet - System.Threading.Channels

더보기

(Flutter) 멀티스레딩 분리

Dart언어를 사용하는 Flutter 플랫폼에서 실행되는 코드는 기본적으로 격리된 메모리 공간에서 단일 스레드 환경으로 이벤트 루프가 실행됩니다. 그렇기 때문에 시간이 오래걸리는 작업 처리시 스레드가 하나로 처리되는데 해당 작업을 처리하는 시간동안은 이벤트 루프가 동작되지 않아 UI 업데이트에 문제가 생기거나 버벅거릴 수 있습니다. Flutter는 화면의 자연스러움을 유지 하기 위해 최소 1ms에 60프레임을 처리하려고 합니다. 이런 요청을 유지 할 수 있도록 이벤트 루프에서 메세지 펌핑이 원활하게 되도록 처리하는 것이 중요합니다.

더보기

(Fluter) Flutter MVVM with GetX

Flutter의 GetX 모듈을 사용해서 MVVM패턴 방식으로 앱을 설계하고 데이터를 다루는 방법에 대해 알아보도록 하겠습니다. Flutter은 .NET의 WPF처럼 처음 구조 설게가 MVVM패턴을 염두해두고 설계되지 않아서 자체적으로 완벽한(?) 데이터 바인딩 기능을 지원하지 않고 있습니다. GetIt이나 GetX 모듈 등을 이용해 빠르게 MVVM 구조로 뷰와 비즈니스로직을 분리하도록 구현해볼 수 있습니다. MVVM 패턴에 대한 설명은 다음 아티클을 참조 하시면 됩니다. 링크 : MVVM 패턴이란 프로젝트를 다루기전에 앞서 이번 MVVM구조에 사용된 GetX의 주요 기능에 대해 살펴보겠습니다.

더보기

(Flutter) Flutter 당근마켓 모바일 버전 Clone 프로젝트

Flutter 당근마켓 모바일 버전 클론 프로젝트 입니다. 웹 API부터 모바일 클라이언트까지 심플하게 구현한 프로젝트 입니다. 이 프로젝트는 Flutter를 중점으로 초급, 초중급 수준의 대상으로 학습 목적으로 제작하였습니다. 저 역시 모자란 부분이 많아 잘못된 부분이 있다면 같이 함께 학습하면서 고쳐봤으면 좋겠습니다.

더보기

(C#) .NET의 ThreadPool은 두개의 ThreadPool이 있습니다.

아티클의 제목처럼 CLR에는 두개의 ThreadPool이 존재 합니다. 첫번째 ThreadPool은 일반적인 Worker Thread가 사용되는 Pool이고 두번째 ThreadPool은 IoCompletionPort(IOCP)를 지원하는 Thread로 비동기 I/O 작업을 처리하기 위한 Thread 입니다. CLR ThreadPool에서 제공되는 I/O Thread는 흔히 File을 비동기로 읽고/쓰고 처리를 할때 FileStream에서 BeginRead/BeginWrite 구현 부분이 I/O Thread로 처리 됩니다. I/O Thread 커널에서 관리되는 스레드가 아니고 Worker Thread와 마찬가지로 C...

더보기