LHH Blog
취소

(C#) 소켓 프로그래밍 기초

소켓 프로그래밍의 기초적인 코드를 짜고 적응해본다. 💻 코드 Server Code 먼저 DNS를 활용해 호스트 이름을 가져와 IP 주소로 바꿔준다. 바꿔준 IP 주소를 가지고 IPEndPoint에 포트번호와 함께 endPoint를 생성한다. 그 다음 소켓 생성을 위해 endPoint와 함께 TCP 모드로 listenSocket을 생성해준다. //...

통신 기초

다른 사용자에게 IP 주소만 알고 정보를 전송한다 해서 정보만 전송되는 것은 아니다. 우리가 마치 택배 박스를 포장하고 주소를 쓰고 택배사까지 보내는 것처럼 생각보다 네트워크 통신은 여러 정보들이 담겨져 전송되고 있다. 통신 초기에는 통신관련 장비를 만들던 업체들이 서로간의 호환성이 없어 자신들의 회사 제품끼리만 연결이 가능했다. 이때 ...

네트워크 기초

네트워크 네트워크는 net + work의 합성어로 사용자들끼리 그물처럼 연결되어 있는 망을 뜻한다. 우리가 흔히 컴퓨터나 스마트폰에서 웹사이트, 멀티 게임, 채팅 등 모두 네트워크와 연결되어 있다. 하지만 이렇게 편리한만큼 악의적으로 바이러나 악성코드를 퍼트려 사용자의 부주의로 인해 쉽게 감염될 수도 있다는 점도 있다. IP 주소 택배를 배송시킬...

(C#) Thread Local Storage (TLS)

TLS란? TLS는 Thread Local Storage의 약자로 각 스레드마다 저장공간을 가지는 방법이다. 정적인 전역 변수가 존재할 때 여러 스레드가 그 변수를 사용한다면 독점권으로 인해 Lock을 걸었다 풀었다하기 때문에 싱글스레드보다 오히려 비효율적으로 사용되게 된다. TLS는 그러한 변수를 각 스레드에게 자신만의 공간에서 다른 스레드의 ...

(C#) ReaderWriterLock 구현 연습

ReaderWriterLock을 어떤식으로 동작하는지 구현해본다. (주석 확인) 먼저 Lock 클래스를 생성하고 다음과 같이 변수를 선언한다. class Lock { const int EMPTY_FLAG = 0x00000000; const int WRITE_MASK = 0x7FFF0000; // 쓰기 const int REA...

(C#) ReaderWriterLock

ReaderWriterLock 여러 스레드를 사용하다 보면 서로 공유되는 데이터가 존재한다. 스레드들의 각 상황마다 읽거나 쓰는 일이 발생되고, 대체적으로 읽는 상황이 더 많고 쓰는 상황은 빈번하게 일어난다. SpinLock을 사용하는 예제에서 읽는 스레드와 쓰기 스레드가 대기를 한다 가정하면 읽기 스레드가 더 많이 수행하는 반면 쓰기 스...

(C#) 컨텍스트 스위칭과 Event

컨텍스트 스위칭 컨텍스트 스위칭은 여러 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스로 옮겨지는 중에 생기는 현상을 말한다. 실행 중인 프로세스가 변경되면 CPU의 레지스터 값을 변경하는데, 변경되기 전에 이전 프로세스가 지니던 데이터를 메모리에 저장시켜줘야 한다. 실행되는 프로세스의 변경 과정에서 발생하는 컨텍...

(C#) SpinLock

SpinLock이란? SpinLock은 만약 다른 스레드가 lock을 소유하고 있다면 그 lock이 반환될 때까지 계속 확인하며 기다린다. 💻 코드 [ Source Code (Click) ] class SpinLock { volatile bool _locked = false; // Enter public vo...

(C#) DeadLock

lock 2개일 때 데드락 현상 만약 A와 B라는 스레드와 lock_1과 lock_2가 존재할 때 A는 lock_1 -> lock_2 순서로 Enter를 하고 B는 lock_2 -> lock_1 순서로 Enter를 동시에 실행한다 가정하면 A는 lock_2를 기다리고 B는 lock_1을 기다리는 데드락 현상이 생기게 된다. 💻 코드 ...

(C#) Lock과 Monitor Class

Monitor 클래스 기존 원자성을 보장하는 방법에서 Interlocked를 사용하였다. 하지만 이 것을 사용하기엔 +/- 밖에 사용을 못하는 단점이 있다. Monitor 클래스의 사용법은 Monitor.Enter가 실행되면 다른 Monitor.Enter를 사용하는 스레드는 Exit가 실행될 때까지 기다리게 된다. 이렇게 되면 Enter와 Exi...