20210812
오늘 공부한 내용 ✍🏻
- 자바의신 31장
✍🏻 자바의 신 31장 Fork/Join 관련 클래스들
-
Fork/Join : 여러 개로 나누어 계산한 후 결과를 모으는 작업
- Fork : 여러 개로 나누는 것
- Join : 나누어서 작업한 결과를 모으는 것
- Work straling : 여러 개의 Deque에 작업이 나뉘어져 어떤 일이 진행될 때 어떤 Deque는 바쁘고 어떤 Deque는 한가할 때가 있는데 이럴 떄 한가한 Deque가 바쁜 Deque에 대기하고 있는 일을 가져다가 해 주는 것
-
Fork/Join 작업 기본 수행 개념
보통 회귀적으로 사용된다
if(작업의 단위가 충분히 작을 경우){
해당 작업 수행
}else{
작업을 반으로 쪼개어 두 개의 작업으로 나눔
두 작업을 동시에 실행시키고, 두 작업이 끝날 때까지 결과를 기다림
}
- Fork/Join 사용 방법
- ResursiveAction/RecursiveTask 상속받아 개발
- 상속 후 ForkJoinPool 클래스 이용해 작업을 시작
public abstract class ResursiveAction extends ForkJoinTask<Void>
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
- ForkJoinTask 클래스
- Future 인터페이스 : 비동기적인 요청을 하고 응답을 기다릴 때 사용
public abstract class ForkJoinTask<V> extends Object
implements Future<V>, Serializable
- 예제
public class GetSum extends RecursiveTask<Long>{
long from, to;
public GetSum(long from, long to){
this.from = from;
this.to = to;
}
public Long compute(){
long gap = to-from;
if(gap<=3){
long tempSum = 0;
for(long loop = from; loop<=to ; loop++){
tempSum = loop;
}
return tempSum;
}
long middel = (from+to)/2;
GetSum sumPre = new GetSum(from, middle);
// 작업 수행
sumPre.fork();
GetSum sumPost = new GetSum(middle+1, to);
return sumPost.compute()+sumPre.join();
}
}
public class ForkJoinSample {
static final ForkJoinPool mainPool = new ForkJoinPool();
public static void main(String args[]){
ForkJoinSample sample = new ForkJoinSample();
sample.calculate();
}
public void calculate(){
long from = 0;
long to = 10;
GetSum sum = new GetSum(from, to);
// 계산을 수행하는 객체를 넘겨주면 작업 시작
Long result = mainPool.invoke(sum);
System.out.prinln("Fork Join:Total sum of " +
from + "~)+to+"="+result);
}
}
NIO 2
- NIO(New I/O) : 데이터를 빠르게 읽고 쓰기 위함
File 클래스 보완
- 기존 File 클래스는 여러 단점들이 존재
- File 클래스를 대체하는 클래스
- Paths : get() 메소드를 사용하면 Path 인터페이스의 객체를 얻을 수 있음. Path 인터페이스는 파일,경로 정보 가짐
- Files : 기존 File 클래스 단점 보완. Path 객체를 사용하여 파일을 통제
- FileSystems : 현재 사용중인 파일 시스템에 대한 정보를 처리하는 데 필요한 메소드 제공. getDefault() 메소드를 사용하면 사용중인 기본 파일 시스템에 대한 정보를 갖고 있는 FileSystem 인터페이스와 객체 얻을 수 있음
- FileStore : 파일을 저장하는 디바이스, 파티션, 볼륨 등에 대한 정보들을 확인하는 데 필요한 메소드 제공
SeekableByteChannel(random access)
- Channel클래스 : 디바이스, 파일, 네트워크 등과의 연결 상태를 나타내는 클래스. 파일을 읽거나 네트워크에서 데이터를 받는 작업을 처리하기 위한 통로
- 바이트 기반의 채널을 처리하는 데 사용
- 채널을 보다 유연하게 처리 가능
NetworkChannel 및 MulticastChannel
- NetworkChannel : 네트워크 소켓을 처리하기 위한 채널. 네트워크 연결에 대한 바인딩, 소켓 옵션을 셋팅하고 로컬 주소를 알려주는 인터페이스
- MulticastChnnel : IP 멀티캐스트를 지원하는 네트워크 채널 (멀티 캐스트 = IP를 그룹으로 묶고, 그 그룹에 데이터를 전송하는 방식 )
- AsynchronousFileChannel : 비동기 처리
- AsynchronousChannelGroup : 비동기적인 처리를 하는 쓰레드 풀을 제공하여 안정적인 비동기 처리 가능
JDBC 4.1
- RowSetFactory와 RowSetProvider 클래스 추가
- 이 클래스들을 이용하면 Connection 및 Statement 객체를 생성할 필요 없이 SQL Query를 수행할 수 있다
TransferQueue 추가
Objects 클래스 추가
- 제공 메소드 : compare(), equals(), hash(), hashCode(), toString()
- 매개 변수로 넘어오는 객체가 null이라고 할지라도 예외를 발생시키 않도록 구현해 놓은 것이 특징
Author And Source
이 문제에 관하여(20210812), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@always/TIL-20210812저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)