본문 바로가기

코딩 내공 Project/IO&NIO 네트워크

IO 클래스 ● 입출력 템플릿 int readcount=0; byte[] buffer = new byte[512]; while((readcount=fis.read(buffer)) != -1){ System.out.write(buffer, 0, readcount); } ■ 바이트단위 IO 클래스 ⓐ ByteArrayInput / Output ⓑ PipedInputStream / OutputStream - 하나의 스레드가 읽어 들인 내용을 다른 스레드에게 전달하고자 할때 ■ 문자단위 IO 클래스 ⓐ BufferedReader / Writer - 메모리를 사용하여 병목현상을 줄임(읽기,쓰기 성능 향상) - BufferedReader readLine () : 개행문자를 만날때까지 읽어 들여 개행문자를 삭제한 문자열 반환, .. 더보기
[NIO] 향상된 서버 부분 정리 1. 버퍼를 사용할 때 : 버퍼를 null로 만들어서 카비지 커렉션 대상으로 하는것은 느려지는 원인 그러므로 ByteBufferPoll을 사용하여 메모리를 재사용하고 매번 ByteBuffer 객체를 생성, 해제에 따른 가비지 생성 부담이 줄어든다 2. 비효율적인 데이터 전송 : 클라이언트가 100byte를 보냈는데 그중 1byte만 먼저 서버에 도착했을때, ⓐ 읽기 준비가 되었다고 셀렉션키의 레디키에 표시 ⓑ select()가 호출되고 isAcceptable(), isReadable() 이 호출 ⓒ read로 1byte를 읽고 다시 1번부터 반복한다. : 읽기의 경우 무조건 read() 메소드를 두번 호출 //데이터의 일부만 전송되었을 수도 있으므로 두번 read 한다. for (int i = 0; i .. 더보기
[NIO] 셀렉터 부분 정리 - 셀렉터는 여러 SelectableChannel 을 자신에게 등록하게 하고 등록된 SelectableChannel의 이벤트 요청들을 나눠서 적절한 서비스 제공자에게 보내 처리하는 것이다. 멀티플렉스(Multiplex)IO를 가능하게 해준다 - 멀티플렉스 IO는 단 하나의 스레드로 동시에 많은 IO 채널들을 효율적으로 관리하여 좀더 적은 CPU와 자원을 소모하게 됨으로써 기존의 서버보다 좀더 빠르고, 많은 동시 접속자를 수용할 수 있는 확장성있는 서버를 만들 수 있다. - SelectionKey가 해당 채널이 접속할 준비가 되어 있는지, 읽을 준비가 되었는지 등의 정보를 저장하고 있고 Selector가 이정보를 보고 준비된 채널들만 처리 1. SelectableChannel - SelectableChan.. 더보기
[NIO] Chanel 부분 정리 - 채널은 네이티브IO 서비스를 이용하기 위해 만들어 졌으며 스트림과 비슷하다 - byteBuffer 채널 byteBuffer - 메모리 맵 파일, 파일 락킹 같은 기능 이용 가능 - 채널 하나로 양방향 통신 가능 - 크게 파일채널, 소켓채널이 있다 public interface Channel extends Closeable{ public boolean isOpen(); public void close() throws IOException; } public interface InterruptibleChannel extends Channel{ public void close() throws IOException; } - 비동기적으로 채널을 닫거나(close), 인터럽트(interrupt)할 수 있다. pu.. 더보기
[NIO] Buffer 부분 정리 버퍼는 운영체제의 커널이 관리하는 시스템 메모리를 직접 사용 할 수있다. byte[]인 경우 jvm의 힙영역에 메모리가 할당되고 바이트 배열의 초기값이 시스템 메모리로 한번 복사 되어야한다. 이렇게 복사 뿐만아니라 운영체제 수준에서 제공해주는 dma, 가상 메모리, 메모리 맵 파일들의 기능을 사용할 수 없다. position - 현재 위치 limit - 버퍼에서 실제로 어디까지 사용할지를 지정 capacity - 메모리 크기, 몇개를 넣을 수 있는가. intbuffer의 capacity 100이면 int형 100개, 초기값 -1 mark - reset() 시 돌아갈 현재 position 설정 * Buffer 클래스 public abstract class Buffer{ //위치값 리턴 public fina.. 더보기
생성자 - 소비자 Queue : 큐의 공통 메소드를 정의한 인터페이스 JobQueue : 인터페이스 Queue를 정의 Consumer : 소비자 Producer : 생상자 Tester : 메인 interface를 사용하여 이것을 구현한 클래스들의 상위 클래스로서 이것을 구현한 하위 클래스들을 "형"에 제한받지않고 사용할수 있다. 싱글톤 패턴 : Queue와 같이 하나만 필요한 경우 여러개 생성을 막기위해 쓰인다 //싱글톤 패턴 시작 private static JobQueue instance = new JobQueue(); private JobQueue(){} public static JobQueue getInstance(){ if(instance == null){ synchronized (JobQueue.class) { .. 더보기
[참고] ByteBufferPool과 ThreadPool을 추가해 성능 업그레이드하기 http://javacafe.or.kr/lecture/cafeLecture/network/threadpool/microsoft2_SJH.html 더보기
[링크] NIO API 1부 - 버퍼와 채널 http://blog.naver.com/hypermin?Redirect=Log&logNo=70020492681 더보기