TIL - 20210812

so2·2021년 8월 12일
0
post-thumbnail

오늘 공부한 내용 ✍🏻

  • 자바의신 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이라고 할지라도 예외를 발생시키 않도록 구현해 놓은 것이 특징

0개의 댓글