본문 바로가기

NIO

[Java] NIO Channel [펌] NIO Channel에 관하여1> 채널(channel)이란?채널은 한마디로 서버와 클라이언트간의 통신수단을 나타낸다. 좀더 깊이 있게 본다면 하드웨어 장비, 파일 ,네트워크 소켓, 혹은 프로그램 컴포넌트와 같이 읽기나 쓰기등 한 개 이상의 뚜렷한 입출력 작업을 수행할 수 있는 개방된 연결을 나타낸다.2> 채널의 역활채널은 비동기적으로 닫히고 중단(interrupt)될 수 있다. 따라서 한 스레드가 한 채널에서 하나의 입출력 작업으로 블록화하면 다른 스레드가 그 채널을 닫을 수도 있다. 비슷하게 한 스레드가 한 채널의 입출력 작업으로 블록화되면 다른 스레드가 블룩화된 스레드를 중단시킬 수 있다. 그래서 파일입출력에서 블록화된 스레드를 언제든지 중지시킬 수 있게 되었으며, 이를 이용해서 네트워크에서 non-.. 더보기
JAVA NIO(non-blocking I/O) NIO 기존의 자바IO가 blocking IO였기 때문에 C,C++에 비해 상당히 느렸다. 또한 File Locking 같은 기능도 지원되지 못했다. 두가지 비 효율적인 부분1. 커널 영역 버퍼에서 프로세스 영역 안의 버퍼로 데이터를 복사[디스크]에서 [커널 영역 버퍼]로 데이터를 저장하는 것은 디스크 컨트롤러가 DMA 기술을 사용하기 때문에 CPU를 사용 하지 않는다. 하지만 [커널 영역]에서 [프로세스 영역 버퍼]으로 데이터를 전달하는 것은 CPU를 사용한다. 만약 커널 영역의 버퍼에 저장된 데이터를 직접 사용한다면 복사하는 시간을 단축 할 수 있고, 복사 대상인 데이터의 가비지 컬렉션도 필요 없다. 그리고 CPU자원도 최소화 할 수 있다. 2. 디스크 컨트롤러에서 커널 영역의 버퍼로 데이터를 복사하.. 더보기