본문 바로가기

전체 글

(234)
[자료구조] 원형 배열(Circular Array) 원형 배열 고정된 크기의 배열을 마치 양 끝이 연결된 것처럼 사용할 수 있게 한 자료구조. 배열의 크기가 N일 때, 배열의 마지막 요소(N-1)에 도착하면, 다음 배열요소는 첫번째 요소(0)로 순환하는 구조. 처음 들어간 데이터가 먼저 나오는 FIFO(First in first out) 구조의 데이터 버퍼에 적합. => 큐(Que) 비원형의 일반 배열은 마지막에 들어간 데이터가 먼저 나오는 LIFO(Last in first out) 구조의 버퍼에 적합하다 구현 mod 연산자를 사용하여 마지막 배열의 다음인덱스가 첫 배열 인덱스로 돌아오도록 구현 public static void printArray() { //원형탁자에 8명의 사람이 있다고 가정. // a, b, c, d, e, f, g, h // 이 때..
[C#] 비동기 프로그래밍_스레드 동기 num이라는 변수를 선언해서 10만씩 더하는 프로그램. 두 개의 스레드를 생성하여 결과값은 20만이 나올 것으로 예상. public static void Run() { int num = 0; Thread t1 = new Thread(() => { for (int i=0; i { for (int i = 0; i < 100000; i++) { num++; } }); t2.Start(); t1.Join(); t2.Join(); Console.WriteLine(num); } 결과 왜 결과값이 20만이 아닐까? 크리티컬 섹션 : 여러 스레드가 동시에 동일한 변수에 접근하면서 문제가 발생...
[C#] 비동기 프로그래밍_프로세스, 스레드 프로세스 : 메모리에 적재된 현재 실행중인 프로그램 스레드 : 프로세스 내에서 명령들의 실행 흐름 단위 public static void Run() { Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.31.1"), 17841); serverSocket.Bind(endPoint); serverSocket.Listen(1000); while (true) { Socket clientSocket = serverSocket.Accept(); Console.WriteLine(cl..
[C#] Nagle 알고리즘 네트워크 상의 패킷 수를 줄임으로써 네트워크 효율성을 높이는 알고리즘 1byte를 보낸다 해도 실제로는 여러 header 정보가 추가되어 수십 바이트를 보내게 된다. 그러므로 1byte를 여러 번 보내는 것 보다 한번에 여러 byte를 보내는 것이 효율적 상대방으로부터 ack를 받고 데이터를 전송 패킷이 줄어들기 때문에 네트워크 효율이 증가하지만 ack를 대기해야 하므로 전송속도가 느리다.
[C#] SO_LINGER Close 함수 호출 시 출력버퍼에 전송되지 않고 남아 있는 데이터를 어떻게 처리할 지 알려주는 옵션. 기본동작은 출력버퍼에 남아있는 데이터는 모두 전송을 하고 fin packet을 보낸다. socket.LingerState = new LingerOption(false, 0); 첫번째 인자는 사용여부. true를 줄 경우 남아있는 데이터를 버리고 상대방에게 비정상 종료를 날린다. 두번째 인자에 설정한 시간 내로 FIN에 대한 ACK를 받지 못하면 비정상 종료
[자료구조] 배열(Array) 배열이란? 배열은 연속적인 메모리 상에 동일한 데이터 타입의 요소들을 순차적으로 일렬로 저장하는 자료구조. 순차적으로 나열된 배열요소는 각 요소마다 인덱스가 붙는다. ex) x[0], x[1].... 배열의 크기는 고정적이다. 배열 인덱스를 사용할 경우 배열요소에 즉시 엑세스할 수 있다. 배열의 차원(Dimension) 한 배열요소를 선택하기 위해 사용하는 인덱스의 수 C#은 32차원 배열까지 지원한다. 가변 배열(Jagged Array) 배열의 요소가 배열타입인 경우 ex) x[0] = new int[2]; x[1] = new int[6]{1, 2, 3, 4, 5, 6}; x[2] = new int[3]{9, 8, 7}; 동적 배열 (Dynamic Array) 정적 배열은 초기화 시 지정한 고정크기를 ..
[자료구조] 자료구조(Data Structure)의 정의 자료구조 (Data Structure) 데이터를 효율적으로 접근하고 조작할 수 있도록 데이터의 구조를 만든 것 자료구조마다 장단점이 있기 때문에 자신의 목적에 맞는 자료구조를 선택해야 한다. 잘 설계된 자료구조를 사용하면 시간과 메모리를 효율적으로 사용할 수 있다. 추상자료형 (ADT) 알고리즘이 문제를 해결하는데 필요한 자료의 형태와 그 자료를 사용한 연산들을 수학적으로 정의한 모델 추상자료형과 자료구조의 차이 추상자료형은 무엇이 구현되어야 하는지 자료의 논리적 형태를 정의 자료구조는 어떻게 구현할 지를 파악해서 물리적 형태로 구현하는 것 예를 들어 스택(Stack)은 추상 자료형으로 마지막에 입력된 데이터가 먼저 사용된다. 스택은 자료구조 구현 측면에서 배열로도 구현할 수 있고, 연결 리스트 형태로 ..
[C#] TCP/IP 소켓 프로그래밍_우아한 종료 우아한 종료 4 way handshake 과정을 거쳐 종료하는 것을 우아한 종료라 한다. public void Shutdown(SocketShutdown how) 각 호스트 별로 입/출력 스트림이 형성. 이러한 입/출력 스트림을 끊어서 send나 receive 함수를 호출 못하게 하는 함수 SocketShutdown.Receive : 입력버퍼의 내용을 전부 삭제하고 입력 스트림을 끊는다. SocketShutdown..Send : 출력버퍼의 데이터를 전송한 후 출력 스트림을 끊는다. SocketShutdown.Both : Receive와 Send 두 가지를 동시에 한다. Both와 Send 는 fin 패킷을 보내면서 4way handshke 과정을 유도 Receive는 fin 패킷을 보내지 않는다. pub..