본문 바로가기

최신 글36

비동기 vs 동기 개요 동기 비동기 동시성 여러 종류 음식을 하나씩 조리함. 여러 종류 음식을 동시에 조리함. 일치화 손님이 올때까지 기다리다 같이 먹음. 손님을 기다리지 않고 먹음. 동기 방식 각 함수의 실행과 완료 시점이 일치한다. 한 시점에 모든 작업이 동시에 이뤄진다. 비동기 방식: 싱글 스레딩(코루틴) using System.Collections; public class Program { public static IEnumerator A() { Console.WriteLine($"{((Thread.CurrentThread.ManagedThreadId == 1) ? "Main" : "Worker")}: Start A"); yield return null; Console.WriteLine($"{((Thread.Cur.. 2021. 9. 8.
async/await 비동기 작업 async/await 비동기 작업 async/await 키워드는 멀티 스레드로 비동기 작업을 수행한다. 우선 yield return을 간단하게 살펴보자. yield return using System; using System.Collections; using System.Threading; public class Program { public static void Main() { var enumerator = DoTaskAsync(); enumerator.MoveNext(); // [Main ] Thread ID: 1 Console.WriteLine($"[Main ] Thread ID: {Thread.CurrentThread.ManagedThreadId}"); if ((int)enumerator.Curr.. 2021. 8. 4.
P/Invoke Marshal: C#에서 C++(native code) 사용하기 Native Code 란? Native Code는 다른 말로 Unmanaged Language이며, C와 C++가 대표적이다. Native Code는 컴파일 시 어셈블리어(≒기계어)로 바로 번역된다. 이에 반해 Managed Language는 중간언어(IL)로 우선 컴파일된다. C#과 JAVA가 대표적이다. 중간언어는 런타임 시 JIT컴파일에 의해 기계어로 번역된다. 📖 레퍼런스 Managed Code vs Native Code의 차이 StackOverFlow: what is native code ? P/Invoke Marshal ? 보통 어플리케이션은 생산성이 높은 Managed Language로 작성되는데, 특정 영역의 API는 Native Code외 사용할 수 없기 때문에 Native Code를 라.. 2021. 8. 2.
Visaul Studio 활용 : C++ 동적 배열의 값 보는 법 동적 배열의 값 보는 법 힙메모리를 사용한 배열 a를 디버깅하면 a의 포인터 값만 드러날 뿐 요소의 값은 나오지 않는다. ✏️ 배열이름은 첫번째 요소의 주소를 가리킨다. a의 요소 값을 추적해보자. 조사식 조사식에 직접 작성한다. 배열이름, 길이 메모리창 메모리창을 열자. 그리고 주소 입력부에 주소를 붙여넣으면, a[0], a[1], a[2] 값이 드러난다. int형이므로 4바이트 단위인 것을 확인할 수 있다. 📖 디버깅 레퍼런스 서적 『Debugging Applications for Microsoft .NET』 - 존 로빈스 2021. 7. 30.
BinaryWriter/Reader 이해하기: Write, Read, vs StreamWriter Write, Read BinaryWriter와 BinaryReader는 스트림 버퍼를 쓰거나 읽는 클래스다. FileStream을 Write/Read 해보자. using System; using System.IO; namespace StreamStudy { class Program { static void Main(string[] args) { DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories(); if (File.Exists("CDriveDirs.txt")) { File.Delete("CDriveDirs.txt"); } // Write using FileStream fw = new FileStream("CDriveDirs.txt", Fi.. 2021. 7. 12.