본문 바로가기

반응형

C#

(91)
운영체제에서 제공하는 다양한 동기화 장치들에 대한 설명 동기화 설명 예 뮤텍스 공유 자원에 대해 오직 하나의 스레드 접근만 허용 acquire(&mutex); // 공유자원 잠금 Func(); // 임계 구역 Releaase(&mutex); // 공유자원 해제 세마포어 공유 자원에 대해 여러 개의 스레드가 동시 접근 가능 P(S) { // P연산 (임계 구역에 들어가기 전 수행) while S
Task와 Thread 차이 프로세스(Process)와 쓰레드(Thread) 프로세스는 실행 파일이 실행되어 메모리에 적재된 인스턴스입니다. 운영체제는 여러가지 프로세스를 동시에 실행할 수 있는 능력을 갖추고 있습니다. 즉 컴퓨터로 Youtube에서 노래를 들으면서 코딩을 할 수 있습니다. 그런데, 프로세스도 한 번에 여러가지 작업을 수행할 수 있습니다. 쓰레드는 운영체제가 CPU 시간을 할당하는 기본 단위인데, 프로세스는 하나 이상의 쓰레드로 구성됩니다. 쓰레드의 장점 - 사용자 대화형 프로그램에서 응답성을 높일 수 있다.(프로그램이 무슨 일을 하고 있을 때 대기 할 필요없이 다른 일을 진행할 수 있다) - 멀티 프로세스 방식에 비해 멀티 스레드 방식이 자원 공유가 쉽다.(프로세스끼리 데이터를 교환할 때 IPC(Inter Proc..
비동기 프로그래밍 비동기 프로그래밍 비동기 프로그래밍은 중앙처리장치(CPU)를 효율적으로 사용하기 위한 기술이다. 중앙처리장치는 매 초마다 정말 많은 작업을 요청받고 처리한다. 데이터를 읽거나 쓰거나, 네트워크 통신을 주거나 받거나, 화면 픽셀을 계산하거나 모두 중앙처리장치의 허가와 지도가 필요하다. 이렇게 바쁜 중앙처리장치에게 현재 입출력 작업이 완료되길 기다리게 하는 건 정말 비효율적이다. 그래서 개발자는 중앙처리장치가 비효율적으로 낭비되지 않도록 비동기 프로그래밍 기술을 사용하여, 중앙처리장치가 입출력을 기다리는 대신 다른 업무를 처리하도록 하고 입출력이 완료되었다는 메세지를 받은 뒤에 기존 작업을 다시 시작하도록 프로그래밍한다. 등장 배경 기본적으로 프로그램은 코드 순서에 따라 순차적으로 실행된다. 그래서 코드 중..
32bit DLL을 64bit .Net 프로그램에서 호출하기 [문제] WPF App에서 모듈을 사용중이다. 모듈이 32bit DLL로 되어져 있다. 그래서 현재 빌드 구성을 AnyCPU의 32비트 기본 사용으로 하고 있다. 그런데 32bit로 프로그램이 실행되다 보니 메모리 부족 문제가 발생되는 것 같아서 WPF 빌드 구성을 64비트로 변경 후 빌드하니 32비트 모듈 DLL이 정상적으로 호출되지 않는 것 같은데 64비트 닷넷 프로그램에서 32비트 네이티브 DLL을 import해서 정상적으로 호출할 수 있는 방법이 있나요? [방안] 1. 없다. 대신 우회 방법으로 모듈을 사용하는 별도의 exe를 32비트로 만들고 그 프로세스를 필요할 때마다 실행한 후 WPF App과의 통신을 소켓 등으로 처리할 수 있다. 그건 그렇고,.. 웬만한 규모의 프로그램이 아니고서는 아무리..
마샬링(Marshalling) vs 직렬화(Serialization) 직렬화 객체의 상태를 저장하기 위해서 객체를 Byte stream으로 변환하는 것을 의미한다. 즉, 객체에 저장된 데이터를 stream에 쓰기 위해서 연속적인(serial) 데이터로 변환하는 것이라 보면 된다. 이는 데이터를 파일로 저장하거나 memory buffer 또는 Network를 통해 데이터를 송/수신 할 때 용이하게 한다. 마샬링 객체의 메모리 구조를 저장이나 전송을 위해 적당한 자료형태(ex. xml)로 변형하는 것을 의미한다. 보통 서로 다른 컴퓨터 혹은 서로 다른 프로그램 간에 데이터가 이동되어야 할 경우에 사용된다. 구체적으로 말하자면 managed data 형을 unmanaged data 형으로 변환시키는 과정이라 할 수 있다. 여기서 중요한 것은 managed data 와 unman..
마샬링(Marshalling) 마샬링이란? 마샬링이란 한 객체의 메모리에서의 표현방식을 저장 또한 전송에 적합한 다른 데이터 형식으로 변환하는 과정입니다. 이는 데이터를 서로 다른 프로그램 간에 전달할 필요가 있을 경우 사용합니다. 즉, 이는 직렬화와 유사하며 직렬화된 한 객체로, 멀리 떨어진 객체와 통신하기 위해 사용합니다. 이렇듯 복잡한 통신을 단순화하여 쉽게 데이터를 주고받을 수 있도록 해주는 것이 마샬링입니다. 프로그래밍에서의 마샬링 클라이언트가 서로 다른 프로세스, 원격지의 메서드를 호출해야한다고 가정합시다. 서버에 넘겨지는 인자, 리턴 값들을 프로그래밍 인터페이스에 맞도록 데이터를 조직화하고, 미리 정해진 다른 형식으로 변환합니다. 이것이 프로그래밍에서의 마샬링입니다. 이는 XML로의 마샬링, Byte 스트림으로의 마샬링 ..
Delegate와 Event Delegate 델리게이트는 메소드에 대한 참조입니다. 즉, 델리게이트는 하나의 형식(type)입니다. 델리게이트는 인스턴스 메소드, 정적메소드 모두 참조가능합니다. 프로그래밍을 할 때 매개변수에 값을 넘겨 쓸모있는 메소드를 만들었습니다. 델리게이트는 값이 아닌 '코드' 자체를 넘기고 싶을 때 사용할 수 있습니다. 한정자 delegate 반환형식 델리게이트이름(매개변수_목록); 델리게이트 체인(Delegate Chain), 익명메소드(Anonymous Method) 델리게이트 하나가 여러개의 메소드를 동시에 참조할 수 있습니다. 체인처럼 델리게이트를 연달아 등록하여, 순서대로 참조된 함수들을 호출합니다. 델리게이트를 등록할 때는 += 연산자 또는 Delegate.Combine() 메소드를 이용할 수 있고..
AutoMapper란? AutoMapper란? AutoMapper는 객체 전환간에 Property 값을 자동으로 매핑해주는 오픈소스 라이브러리이다. 보통 DTO -> Entity 객체간 전환에 대표적으로 많이 사용한다. (DTO : 데이터 수송 객체(Data Transfer Object)) 클라이언트의 Request body로 받은 DTO 객체는 비즈니스 로직을 실행하기 위해 Entity로 변환하는 작업이 필요하다. 또한 Response body에 데이터를 전달하려면 Entity를 다시 DTO로 변환해야 할 것이다. 두 클래스의 변환 작업은 Mapper 클래스를 구현하여 해결할 수 있으며, 이를 통해 계층 간의 역할을 분리할 수 있다. 여러 개의 DTO를 하나의 DTO로 합친다거나, 반대로 하나의 DTO를 여러개로 쪼갠다거나,..

반응형