SouthGlory
Preview Image

메모리베리어 (하드웨어의 최적화 방지)

이번 포스팅은 메모리베리어에 관하여 다루어보겠습니다. 메모리베리어는 지난번에 확인했었던 릴리즈모드에서의 어셈블리어화 최적화를 할 때 코드의 순서가 뒤바뀌는 것과 같은 상황이 릴리즈모드가 아닌데도 하드웨어적으로 일어날 때 사용할 수 있는 방법입니다. 문제가 일어나는 예시 코드를 살펴보겠습니다. using System; using System.Data...

Preview Image

경합 조건(Race Condition)과 원자성(atomic)

이번 글은 멀티쓰레드 프로그래밍에서 일어나는 경합조건Race Condition에 관하여 알아보고, 이를 해결하기 위해 원자atomic 단위의 코딩이 필요하다는 것을 알아보겠습니다. 경합 조건이란, 서로 경쟁하는 조건이라고 보시면 될 것 같습니다. 그리고 이 조건에서 일어날 것으로 예상할 수 있는 문제는 예를 들어 카페에서, 한 테이블에서 콜라를 ...

Preview Image

캐시Cache의 Spatial Locality

이번에는 캐시에 대해서 간단히 실습해보겠습니다. 물론 캐시에 대해 아는 것도 멀티쓰레드 프로그래밍과 관련이 있습니다. 멀티쓰레드 프로그래밍에서는 코드가 캐시를 얼마나 효율적으로 잘 사용하는지 여부에 따라서 그 성능의 차이가 싱글쓰레드 프로그래밍보다 커진다고 합니다. 그렇다면 캐시란 무엇일까요? 지난 포스팅에서 소개했던 AMD사의 CPU를 다시 보겠습니...

Preview Image

C# 릴리즈 모드 에러, (컴파일러 최적화)

싱글쓰레드 프로그래밍과는 다르게, 멀티쓰레드 프로그래밍은 분명히 디버그 모드일때는 잘 동작하던 코드가 릴리즈 모드일때는 여러 에러를 만들어내는 경우가 많다고 합니다. 그리고 그 원인은 바로 Release를 위해 컴퓨터가 assembly 언어로 변환할 때 자체적으로 하는 코드 최적화 때문일 수 있습니다. 릴리즈를 해본 경험이 풍부하지 않다면 미리 많은 ...

Preview Image

멀티쓰레드(Multi-thread)

서버를 만들기 위해서는 멀티쓰레드의 개념을 알아야 합니다! 먼저, 다들 컴퓨터에는 CPU가 있다는 것 알고 계실텐데요, CPU는 몇 개의 코어 프로세서로 이루어져 있습니다. 요새 가장 최신의 하이엔드 일반소비자용 AMD CPU는 7900x인데요, 12개의 코어로 이루어져 있습니다. 쓰레드는 여기 있는 코어가 빠르게 움직여서 마치 여러개 있는 것...