(C#) False sharing(거짓 공유) - 병렬처리가 더 느릴 수 있다!

이번 포스팅은 False sharing(거짓 공유)에 대해 알아보고 이런 현상 이유와 해결하는 방법에 대해 알아보겠습니다. 우리는 어떤 작업에 대해서 오래 걸리는 작업인 경우 다수의 스레드를 이용해서 병렬처리를 하면 단일 처리를 하는 것 보다 더 빠르게 처리할 수 있다는것을 잘 알고 있습니다. 그런데 이렇게 빠르게 처리하기 위한 병렬처리 부분이 하드웨어(CPU) 구조적인 문제로 인해 정상 속도가 나오지 않는 문제가 있습니다. 심지어는 단일 스레드로 처리하는 속도 보다 더 느린 결과가 나올 수도 있습니다.

더보기

(C#) 동기화 설명 및 Volatile 동기화

멀티 스레드 환경에서 공유 자원에 대해 동시에 서로 읽고/쓰기 처리를 하는데 있어 동기화 처리 고려를 하지 않을 수 없습니다. 스레드 동기화 처리 방법은 크게 유저 모드에서 처리 되는 기법과 커널 모드에서 처리 되는 기법 두가지로 나눌 수 있는데 이번 글에서 유저 모드 동기 처리 방식은 Volatile 동기화에 대해 알아보도록 하겠습니다.

더보기

(C#) Lock-Free, Interlocked 사용 (CAS)

이전 포스팅에서 Volatile을 통한 원자적 동기 처리를 알아 보았습니다. 링크 이렇게 원자적 처리를 이용해서 읽기, 쓰기, 비교 처리를 사용해서 명시적인 Lock 사용 없이 Non-Blocking 으로 동기화 처리 할 수 있는데 이러한 방법을 Lock-Free 동기화 라고 부릅니다. 이번 글은 Lock-Free가 왜 필요한지 또 어떻게 구현되고 사용할 수 있는지에 대해 알아보겠습니다.

더보기

(WPF) WPF KakaoTalk PC버전 Clone 프로젝트

WPF로 KakaoTalk PC버전 클론 프로젝트 입니다. 서버와 별도 통신 기능이 없는 순수 클라이언트 기능을 WPF로 구현한 프로젝트 입니다. 서버 통신 이외 가급적 실제 동작할 수 있도록 구현 목표를 잡았으며 이 프로젝트는 WPF를 배우는 초급, 초중급 수준의 대상으로 학습 목적으로 제작하였습니다. 저 역시 모자란 부분이 많아 잘못된 부분이 있다면 같이 함께 학습하면서 고쳐봤으면 좋겠습니다.

더보기

(WPF) MVVM패턴에서 ViewModel에서 팝업창 다루기

MVVM패턴으로 설계되어 있는 프로젝트에서 새로운 팝업 윈도우를 띄우고자 하는 경우 어떻게 처리 해야 하는지 알아보도록 하겠습니다. ViewModel과 상호 작용 없이 단순한 팝업 윈도우를 띄우는 것은 그냥 View의 코드비하인드 에서 단독으로 처리해도 상관 없지만 보통 이런 상황은 거의 없을 것 입니다. 특정 행위 이후 조건에 따라 -> 팝업 표시 같은 상황에 있어서 비지니스 로직은 Model에서 처리 되고 View 관련 로직 처리는 ViewModel에서 처리 하는 것이 맞습니다. ViewModel에서 팝업을 띄우는 방법은 여러가지 방법이 있는데 Window를 사용하지 않고 Frame를 이용해 Vi...

더보기