- Java AIO 와 비동기 non-blockingstarryeyeJava AIO (NIO2) 에 대해 알아보겠다. 참고라이브러리가 따로 있는건 아니고..java.nio 를 공유하며..대신 사용되는 클래스이름이..앞에 "Asynchronous" 가 붙는다.예시 ) AsynchronousServerSocketChannel 이전 상황Java NIO, Selector, epoll(커널) 을 쓰게되면...커널에서 애플리케이션으로 accept, read 등의 준비 완료 이벤트를 전달해주지 않고애플리케이션에서 커널로 직접 주기적 확인이 필요했다.즉.. busy-wait 가 발생하고 있는 것이다. (동기 non-blocking) Java AIO 에서는 이를 해결한다. Java AIO 동작커널의 역할I/O 작업이 커널에 전달되고, 커널은 이 작업을 비동기적으로 처리한다.작업이 완료..
- 2023-11-19 02:49:13
- Java NIO 의 Selector 와 epollstarryeye이전 포스팅에서 selector 를 알아봤는데... 결국 selector 는... 여러 이벤트를 하나의 스레드로 한꺼번에 확인할 수 있는 객체였다. (IO Multiplexing) 그러면 다시 busy-wait 관점에서 생각하자면.. selector 가 도입 되면서.. busy-wait 가 사라졌을까.. 아니다.. 사용자 코드에서는 사라졌지만, selector 가 사용자를 대신해서 준비 완료되었는지.. 확인하고 있는 것이다. 혹은... selector 로 좀더 편하게 준비 완료되었는지 확인하는 것이다.. 좀더 설명하자면.. selector 사용 전에는 accept, read (IO 호출)를 직접 호출(사용자 코드가 Caller 입장)하였지만.. 이제는 사용자 코드가 Callee 느낌으로.. selecto..
- 2023-11-19 00:34:22
- Java NIO 의 Selectorstarryeye이전 포스팅에서 Java NIO 를 사용할 때 Java NIO 가 동기 non-blocking 방식이라 busy-wait 이 발생하였다. busy-wait 에 대해 잠시 복습하고 진행하겠다. busy-wait 은 동기 non-blocking 구조에서 자주 보이는 현상으로.. non-blocking 이라 caller 는 callee 작업으로 부터 자유로운데 동기 방식이라 callee 의 작업이 끝났는지(결과를 받을 수 있는지) 주기적 확인이 필요한 상황이다. 그래서.. 주기를 늘리면 실시간성이 떨어지게 되고.. 주기를 좁히면 그만큼 blocking 과 다를 바가 없고 CPU 자원이 낭비 되는 것이다. 문제는 서버에서는 여러 이벤트를 동시에 다루고 여러 요청을 다룰 수 있어야한다. 위와 같은 방식에서는 ac..
- 2023-11-17 22:51:45
- Java NIO 와 동기 non-blocking + CPU 자원starryeyeJava NIO (new IO) 를 이용한 Server - Client 의 동작을 동기 / 비동기, blocking / non-blocking 관점에서 알아보겠다. 참고로 java.nio 패키지에 존재하는 selector 는 다음 포스팅에서 다루겠다. Java IO 와 다르게 Java NIO 는 non-blocking 하게 동작할 수 있는 옵션이 존재한다. -> ServerSocketChannel::configureBlocking 메서드를 호출해주고 파라미터 값으로 false 를 전달한다. 해당 옵션을 사용하면, accept 와 read 에서 blocking 되지 않고 바로 넘어간다. 각각 null, 0 을 리턴해버린다. accept 의 예시 코드를 보며 계속 하겠다. 즉, non-blocking mod..
- 2023-11-15 23:37:57
- Java IO 와 동기 blocking + CPU 자원starryeye이번 포스팅에서는 Java IO 를 이용한 Server - Client 의 동작에서 동기 / 비동기, blocking / non-blocking 관점과 CPU 자원 소모를 알아보겠다. server side accept 서버를 구동하면 blocking 되는 첫번째 포인트이다. 클라이언트에서 연결 요청이 올때까지 blocking 된다. read 클라이언트에서 요청 데이터를 보내서 서버 버퍼에 도착할 때까지 blocking 된다. write 서버에서 클라이언트로 보낼 응답 데이터를 서버 OS 네트워크 버퍼에 적재를 완료할 때까지 blocking 된다. -> accept, read 와 다르게 클라이언트의 시그널을 기다리는 것은 아니다. client side connect 클라이언트가 서버에 연결될 때까지 blo..
- 2023-11-15 21:14:26
- Java 16 주요 변경점starryeyeJDK 16 1. Stream 클래스에 메서드 추가 toList() 스트림의 요소들을 순서대로 List 에 담아 반환한다. Java 16 이전에는 collect(Collectors.toList()) 를 사용했지만, 좀더 간결하게 표현 가능해졌다. mapMulti() mapMulti() 를 알아보는 김에.. map(), flatMap(), multiMap() 를 알아보겠다. (map, flatMap 은 Java 8) map() 스트림 내부의 요소 하나하나에 접근해서... 파라미터로 넣어준 함수를 실행한 뒤 최종연산에서 지정한 형식으로 반환해주는 메서드이다. flatMap() 스트림 내부의 각 요소를 한번 더 또다른 스트림으로 변환하고, 이렇게 생성된 모든 스트림을 하나의 스트림으로 결합한다. (중첩된 데이..
- 2023-05-20 01:41:47
- Java 11 ~ 15 주요 변경점starryeyeJDK 11 1. String 클래스에 유용한 메서드 추가 isBlank() 문자열이 비어있거나, 공백 문자만을 포함하고 있는지 검사한다. lines() 문자열을 줄바꿈 문자 '\n' 를 기준으로 분리하고, 분리된 각 줄을 요소로하는 stream 을 반환한다. repeat(int n) 문자열을 주어진 횟수만큼 반복하여 반환한다. strip(), stripLeading(), stripTrailing() 문자열의 앞뒤 혹은 특정 부분에서 공백 문자를 제거한다. trim() 메서드와 비슷하지만.. trim() 메서드는 ASCII 공백 문자만 처리하지만, strip() 계열 메서드는 유니코드 공백 문자를 모두 처리하여 상위호환이다. ASCII 공백 문자 : 스페이스(' '), 탭('\t'), 줄바꿈('\n') ..
- 2023-05-19 22:36:07
- Java 9, 10 주요 변경점starryeyeJDK 91. 인터페이스에 private 메서드 추가이전 history Java 8 버전에서는 인터페이스에 default, static 메서드가 추가 되었었다. 내용 Java 9 버전에서는 인터페이스에 private 메서드가 추가되었다. 코드 추상 클래스 vs 인터페이스 - 둘 다 객체로 만들 수 없다. - 추상클래스는 public, protected, private 가능하지만, 인터페이스는 public, private 가능 - 추상클래스에는 멤버변수 선언 가능, 인터페이스는 public static 변수만 선언 가능 - 추상클래스는 extends 1개 가능, 인터페이스는 implements 여러개 가능 2. try-with-resources 문법, effectively final 변수이전 history..
- 2023-05-19 21:19:19
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)