본문 바로가기

programing150

Overlapped IO 모델 - IO 중첩 > 하나의 쓰레드 내에서 동시에 둘 이상의 영역으로 데이터를 송수신 하여 입출력이 중첩되는 상황 > 호출된 입출력 함수가 바로 반환해야 가능(바로 반환하여 바로 다음 패킷 전송) -> 비동기 IO > 비동기 IO가 가능하려면 호출되는 입출력 함수는 Non-Blocking 모드 > 입출력 뿐만 아니라 입출력의 완료를 확인하며 송수신 - Overlapped IO 소켓 생성 SOCKET WSASocket( int af, // 프로토콜 체계 int type, // 소켓의 데이터 전송 방식 int protocol, // 사용되는 프로토콜 LPWSAPROTOCOL_INFO lpProtocolInfo, // 소켓의 특성정보(WSAPROTOCOL_INFO) 구조체 GROUP g, // 함수 확장을 위해 .. 2015. 6. 1.
code, data(bss), heap, stack stack쪽이 높은 주소이고 code쪽이 낮은 주소 code data (bss) heap 자유영역 stack 변수를 저장할 수록 stack 만 주소값이 낮아짐, heap과 data는 높아짐 지역 변수는 실행중 메모리에 할당 -> Runtime 전역 변수는 프로그램 시작과 동시에 메모리에 이미 된 할당 -> Compile time 2015. 5. 22.
Asynchronous Notification IO 모델 - 동기(Synchronous) > send()가 호출되는 순간 데이터의 전송이 시작되고 , send() 호출이 완료(반환)되는 순간 데이터 전송이 완료 > recv()가 호출되는 순간 데이터의 수신이 시작되고 , recv() 호출이 완료(반환)되는 순간 데이터 수신이 완료 ( recv()같은 경우 데이터 받을 때 까지 무한 대기 상태이다 ) - 비동기(Asynchronous) > 입출력 함수의 반환시점과 데이터 송수신의 완료시점이 일치하지 않은 경우 - 동기화 입출력 단점 > 입출력이 진행되는 동안 호출된 함수가 반환을 하지 않아서 다른 일을 할 수 없음 > 비동기화가 해결책, 동기 방식의 단점을 극복한 모델 - 비동기 Notification 입출력 모델에 대한 이해 > 입력 버퍼에 데이터가 수신되어서.. 2015. 5. 22.
표준 입출력 함수, 입출력 스트림, select()의 문제, 쓰레드 - 표준 입출력 함수 > 좋은 이식성, 버퍼링을 통한 성능 향상에 도움 > 버퍼링을 이용하면 모든 상황은 아니지만 전송할 데이터양이 많을수록 성능이 우월 (전송하는 데이터 양, 출력 버퍼로 데이터 이동 횟수) - 표준 입출력 함수 vs 시스템 함수 > 시스템 함수 read() write()를 이용하면 큰 용량의 파일을 읽을 시 버퍼를 제공 하지 않기 때문에 느리다. > 표준 입출력 함수 fputs() fgets()는 버퍼를 이용하기 때문에 보다 빠르다 - 표준 입출력 함수 사용에 있어서 불편한 사항 > 양방향 통신이 쉽지 않다 > 상황에 따라서 fflush 함수의 호출이 빈번히 등장할 수 있다. > 파일 디스크립터를 FILE 구조체의 포인터로 변환해야 한다. cf. 파일을 읽고 쓰기가 동시에 가능하려면 .. 2015. 5. 21.