자바

· 자바
새 코루틴의 범위를 정의한다.코루틴을 생성하기 위한 명세서이다. 모든 코루틴 빌더(예: launch, async 등)는 코루틴 스코프의 확장이며, 코루틴 컨텍스트를 상속받아 모든 요소와 취소를 자동으로 전파한다.public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job { // 기존의 컨텍스트와 합쳐진 새로운 컨텍스트 val newContext = newCoroutineContext(context) ..
· 자바
컨텍스트 스위칭다른 스레드 없이 메인 스레드 하나만 스케줄링하다고 하면, 메인 스레드는 항상 실행될 것이다. 반대로 CPU 개수보다 실행 중인 스레드의 개수가 많다고 하면, 운영체제가 특정 스레드의 실행 스케줄을 선점하고 다른 스레드가 실행될 수 있도록 스케줄을 잡는다. 이처럼 하나의 스레드가 실행되다가 다른 스레드가 실행되는 순간 컨텍스트 스위칭이 일어난다. 컨텍스트 스위칭이 일어나는 상세한 구조를 보면, 먼저 현재 실행 중인 스레드의 실행 상태를 보관해두고, 다음번 실행되기로 스케줄 된 다른 스레드의 실행 상태를 다시 읽어 들인다. 스레드 스케줄링을 하려면 운영체제와 JVM 내부의 공용 자료 구조를 다뤄야 한다는 문제가 있다. 운영체제와 JVM 역시 프로그램 스레드가 사용하는 것과 같은 CPU를 함께..
· 자바
확장성은 CPU, 메모리, 디스크, I/O 처리 장치 등의 추가적인 장비를 사용해 처리량이나 용량을 얼마나 쉽게 키울 수 있을지를 말한다. 병렬 프로그램 환경에서 확장성을 충분히 가질 수 있도록 애플리케이션을 설계하고 튜닝하는 방법은 기존에 해오던 일반적인 성능 최적화 방법과 다른 부분이 많다. 성능을 높이기 위해 튜닝하는 작업을 하는 경우 그 목적은 어쨌건 동일한 일을 더 적은 노력으로 하고자 하는 것이다. 성능이라는 단어에 포함된 '얼마나 빠르게'와 '얼마나 많이'라는 두 가지의 의미는 완전히 다른 뜻을 가지며, 심지어는 서로 화합할 수 없는 상황도 발생한다. 더 높은 확장성을 확보하거나 하드웨어 자원을 더 많이 활용하도록 하다 보면, 앞서 큰 작업 하나를 작은 여러 개의 작업으로 분할해 처리하는 것..
· 자바
카운팅 세마포어는 특정 자원이나 특정 연산을 동시에 사용하거나 호출할 수 있는 스레드의 수를 제한하고자 할 때 사용한다.카운팅 세마포어의 이런 기능을 활용하면 자원 풀이나 컬렉션의 크기에 제한을 두고자 할 때 유용하다. public Semaphore(int permits) { sync = new NonfairSync(permits); }Semaphore 클래스는 가상의 퍼밋을 만들어 내부 상태를 관리하며, Semaphore를 생성할 때 생성 메소드에 최초로 생성할 퍼밋의 수를 넘겨준다. 외부 스레드는 퍼밋을 요청해 확보하거나, 이전에 확보한 퍼밋을 반납할 수도 있다. public boolean tryAcquire(int permits, long timeout, TimeUnit unit) ..
· 자바
데이터 클래스는 주로 데이터를 보유하는 데 사용된다.각 데이터 클래스에 대해 컴파일러는 인스턴스를 읽을 수 있는 출력으로 인쇄하고, 인스턴스를 비교하고, 인스턴스를 복사하는 등의 작업을 수행할 수 있는 추가 멤버 함수를 자동으로 생성한다. 컴파일러는 기본 생성자에서 선언된 모든 프로퍼티에서 다음 멤버를 자동으로 파생한다.equals()/hashCode()toString()componentN()copy()컴파일러는 자동으로 생성된 함수에 대해 기본 생성자 내부에 정의된 프로퍼티만 사용한다.생성된 구현에서 프로퍼티를 제외하려면 클래스 본문 안에 프로퍼티를 선언해야 한다. 생성된 코드의 일관성과 의미 있는 동작을 보장하기 위해 데이터 클래스는 다음 요구 사항을 충족해야 한다.기본 생성자에는 매개변수가 하나 이..
· 자바
Thread Pool 장점스레드 생성 및 소멸 오버헤드 감소미리 생성된 스레드를 유지하며 이러한 오버헤드를 줄인다.작업이 필요할 때마다 새로운 스레드를 생성하는 대신, 기존의 스레드를 재사용한다.리소스 관리 및 성능 향상제한된 수의 스레드를 유지하여 시스템 리소스를 효율적으로 관리과도한 스레드 생성으로 인한 메모리 부족이나 성능 저하를 방지하고, 애플리케이션의 안정성을 높임작업 대기열 관리작업 대기열을 통해 동시에 처리할 수 없는 작업을 관리작업이 도착하는 즉시 처리되지 않더라도, 시스템이 안정적으로 작업을 처리할 수 있도록 도와준다. Thread Pool 종류FixedThreadPool고정된 수의 스레드를 유지하며, 일정한 작업량을 처리하는 데 적합CachedThreadPool작업이 들어올 때마다 새로..