본문 바로가기

프로그래밍언어/C#

(7)
[C#] TCP/IP 소켓 프로그래밍_입출력 버퍼, 슬라이딩 윈도우 버퍼 데이터 통신을 효율적으로 하기 위해 데이터를 일시적으로 저장하는 공간 슬라이딩 윈도우 입력버퍼의 크기가 100byte인데 상대방이 70byte를 보냈다면, 입력버퍼에는 30byte가 남게된다. 이를 ack 패킷에 보낼 때 30byte가 남았다고 Window size에 담아서 보낸다. 받는 사람은 상대방의 입력버퍼에 30byte가 남아있는 것을 알기 때문에 최대 사이즈를 30byte로 보내게 된다.
[C#] 동시성 프로그래밍_비동기 스트림 비동기 스트림(asynchronous stream) - 비동기 적으로 다수의 데이터 항목을 수신하는 방법 - 비동기 열거 가능형인 IAsyncEnumerable를 바탕으로 만들어졌다. => 필요에 따라 항목을 만들 수 있으며 각 항목을 비동기적으로 만들 수 있다.
[C#] 동시성 프로그래밍_Task.WhenAny - 일련의 작업을 입력받고, 입력받은 작업 중 하나를 완료하면, 완료된 작업을 반환 public static string Run1() { StringBuilder sb = new StringBuilder(); for (var i = 0; i
[C#] 동시성 프로그래밍_Task.WhenAll - 모든 작업의 완료를 대기하고 싶을 때 사용 - 다수의 작업을 전달받고 제공된 모든 작업이 완료될 때 까지 스레드를 블로킹 시킨다. public class AsyncTest { public static string Run() { StringBuilder sb = new StringBuilder(); for (var i = 0; i
[C#] 동시성 프로그래밍_ CancellationTokenSource를 이용한 타임아웃 구현 - CancellationToken : 비동기 작업을 취소
[C#] 동시성 프로그래밍_ 지수 백오프(exponential backoff) - 재시도 사이의 대기 시간을 점진적으로 늘리는 전략 - 웹 서비스 관련 작업에 사용하면 서버가 재시도로 넘치지 않게 막을 수 있다. public static async Task GetRequestHttpWithRetries() { //1초 후, 다음에는 2초 후, 다음에는 4초 후 재시도 TimeSpan nextDelay = TimeSpan.FromSeconds(1); HttpClient client = new HttpClient(); string url = "http://www.naver.com"; for (int i = 0; i != 3; i++) { try { var result = await client.GetStringAsync(url); Console.WriteLine(string.Forma..
[C#] 동시성 개요 - 동시성 한 번에 두 가지 이상의 작업을 수행 - 멀티스레딩 다수의 실행 스레드를 사용하는 동시성의 한 형태 - 병렬처리 많은 작업을 여러 스레드에 나눠서 동시에 수행 병렬 처리 또는 병렬 프로그래밍은 멀티스레딩을 사용해서 멀티 코어 프로세서를 최대한 활용하는 방법. 작업을 나눠서 각각 다른 코어에서 독립적으로 실행할 수 있는 여러 스레드에 맡긴다. - 비동기 프로그래밍 불필요한 스레드의 사용을 피하려고 프로미스(promise)나 콜백(callback)을 사용하는 동시성의 한 형태 - 리액티브 프로그래밍 애플리케이션이 이벤트에 대응하게 하는 선언형 프로그래밍 방식 정리