MainThread는 쓰레드가 처음 실행할 함수를 지정한다. 이 외에도 매개변수를 전달해야 하는 경우 ParameterizedThreadStart를 매개변수로 받을 수 있다.
SpinLock의 핵심은 Lock을 얻지 못했을 때 루프를 돌며 Lock을 얻는 시도를 반복하는 것이다. SpinLock을 구현할 때는 Lock을 얻는 함수를 호출한다면, 호출한 객체에 Lock을 얻었음을 보장해야 한다. 1. Main Lock의 예제
Event는 멀티쓰레드 환경에서 쓰레드 간의 동기화나 통신을 위해 사용된다. 한 쓰레드는 다른 쓰레드에게 데이터가 처리 되었음을 알리는 Event나 정보가 준비되었다는 Event를 보낼 수 있다.
ReadWriteLock은 여러 쓰레드가 동시에 읽는것(Read)는 가능하지만 쓰는것(Write)은 하나의 쓰레드만 가능하도록하는 Lock기법이다.
Socket에서 할 수 있는 행동에는 Bind, Listen, Accept, Connect, Send/Receive, Close가 있으며 C#에서는 다음과 같은 함수로 사용할 수 있다.
[소켓 프로그래밍 - Listen]에서 Accept의 블로킹을 해결하기 위해 비동기로 클라이언트의 요청을 받는 Listen Class를 구현했는데 Receive와 Send에 대한 블로킹을 해결해야할 필요가 있다.
기존의 Connect는 블로킹함수로 Connect요청부터 연결이 완료될 때까지 요청한 쓰레드는 다른 연산작업을 할 수 없다. 이를 위해 비동기 Connect를 위한 Connector Class를 만들 필요가 있다.
[소켓 프로그래밍 - Session]에서 Send와 Receive를 구현할 때 버터의 사이즈를 1024로 고정해 구현했는데 실제 서버에는 가변길이의 버퍼가 필요할 것이다.
[소켓프로그래밍 - Session]에서 서버와 클라이언트 사이의 통신 Session을 구현하였는데 서버-클라이언트간의 패킷 통신같은 경우 받은 데이터를 패킷으로 조립하는 과정이 필요하다.
서버와 클라이언트가 패킷통신을 할 때 패킷은 결국 Byte스트림으로 전송되는데 요청/응답 패킷에는 데이터가 있을 수 있다. 그렇다면 데이터를 패킷으로 변환하고 패킷을 데이터로 변환할 필요가 있는데 데이터를 패킷을 변환하는 것을 직렬화라고한다.
여러 클라이언트가 하나의 서버를 통해 통신하는 구조를 나타내면 아래 그림과 같다. 위 구조에서 클라이언트는 서버와 통신을 위한 Session을 가지고 있고 Session을 통해 다른 클라이언트와 데이터를 주고 받을 수 있다.
Entity Framework Core(EFC)는 .NET Core와 .NET 5버전 이상에서 사용가능한 ORM 프레임워크로 코드로 데이터베이스 생성, 테이블 생성과 같은 데이터베이스 작업을 수행할 수 있다.
로그인 처리를 위한 Account Server는 하나의 웹서버로 만들 수 있다. C#에서 웹서버를 만들기 위해서 ASP.NET Core를 사용할 수 있는데 사용자 계정에 대한 DB모델을 정의하고 일종의 RESTful API를 구축해