Programming/Process & Multi Threading 10

Pure Function(순수 함수)는 왜 함수형 프로그래밍의 핵심 개념일까?

자바스크립트로 함수형 프로그래밍(Functional Programming)을 공부하다가 처음 알게된 개념이다. Pure Function? 번역 그대로 순수 함수라는데 함수형 프로그래밍의 핵심 개념 중 하나라고 한다. 도대체 이게 왜 핵심개념 중 하나라는 건지 이해가 안되서 정리를 해보았다. 일단 공신력있는 위키피디아 정의를 알아보자 the function return values are identical for identical arguments (no variation with local static variables, non-local variables, mutable reference arguments or input streams, i.e., referential transparency), and..

[Java] Executors로 스레드 관리하기

Thread Pool 과 Executor Framework를 사용하는 이유? - 자바에서 Executors는 task를 간단하게 비동기로 처리할 수 있게 해주는 thread-pool과 API를 제공하는 framework이다. 각각의 프로세스에 스레드를 새로 생성하고 관리하는 작업은 메모리를 소비하고, CPU에서는 컨텍스트 스위칭(Context Switching)이 일어나 그 만큼의 시간을 소비하게 된다. 이 때 Thread Pool을 사용한다면 스레드를 재사용하여 효율적으로 스레드를 관리할 수 있다. Thread Pool은 Queue 자료구조로 관리된다. Executor는 크게 4 타입으로 구분된다. 1.) SingleThreadExecutor - task를 순차적으로(sequential)로 실행하기 위..

Mutext 뮤텍스 vs Semaphore 세마포어

글에 들어가기에 앞서, 세마포어와 뮤텍스의 가장 기본적인 차이점은 세마포어는 signal mechanism 신호 메커니즘이라는 것이다. 프로세스는 자원을 획득하기 위해 wait()과 signal()을 이용하여 작업을 수행한다. 반면에 뮤텍스는 lock mechanism 잠금 메커니즘이다. 프로세스가 리소스를 획득하려면 해당 뮤텍스 객체의 락을 얻어야한다. 세마포어란? 세마포어는 한국어로 '신호기'라는 의미로서, 마치 기찻길의 신호기처럼 두 개의 철도가 충돌하는 것을 막기위해 두 열차의 진입순서를 막아주는 역할을 한다. Semaphore(int permits, boolean fair) 신호기의 역할은 Semaphore 생성자의 파라미터로 들어가는 int permits이 한다. permits은 세마포어가 가..

[Java] 자바 고유락(Intrinsic Lock)이란? (synchronized block)

고유락(Intrinsic Lock) Java에서 고유락(intrinsic lock)은 monitor lock 으로 불리기도 하며, 멀티스레드 환경에서 동기화를 달성하기 위해 사용되는 내부적인 잠금 매커니즘이다. 고유락은 객체당 단 하나만 부여되며, synchronized 키워드를 이용하여 여러 스레드를 동기화 시킬 수 있다. 사용예시는 다음과 같다. public static int counter = 0; // 공유자원 public synchronized void increment(){ // 고유락 counter++; } public static void process(){ Thread t1 = new Thread(new Runnable(){ @Override public void run(){ for(in..

[Java] 스레드와 메모리구조 그리고 프로세스(Process)의 구조

메모리의 종류 스택메모리 (Stack Memory) Each JVM thread has a private Java virtual machine stack, created at the same time as the thread. A JVM stack stores frames, also called “stack frames”. A JVM stack is analogous to the stack of a conventional language such as C 각각의 JVM 스레드는 만들어짐과 동시에 JVM스택(Java Virtual Machine Stack ) 이 함께 만들어진다. JVM 스택은 "스택 프레임(Stack Frame)"이라고 하는 프레임들을 저장하며 이는 C언어의 스택 구조와 비슷한 것이다. ..

[Java] 스레드의 우선순위(Thread Priority)

스레드 스케줄러와 CPU의 관계 스레드 스케줄러는 JVM에서 관리되며, 프로세스와 CPU사이에서 어떤 스레드가 우선적으로 CPU에 의해 실행될지 결정하는 역할을 한다. 스레드를 동시성(Concurrency)으로 실행시키는 주체는 스레드 스케줄러이다. 스레드 여러개를 동시에 번갈아가면서 실행시켜서 마치 동시에 실행되는 것처럼 보이게 해준다. 동시성 스레드 예시(시분할 알고리즘 , Time-slicing algorithm) 4. 스레드 스케줄러는 단일 프로세서 시스템에서 여러 스레드 간에 실행을 조절하는 역할을 한다. 스레드 간에 번갈아가면서 실행되어 동시성을 제공하지만, 이는 하나의 코어에서 이루어지는 것이다. 5. 반면에 병렬성은 여러 코어 또는 프로세서에서 동시에 작업이 처리되기 때문에, 스레드 스케줄..

[Java] Main Thread(메인 스레드)와 Worker Thread(작업 스레드) 그리고 Daemon Thread(데몬 스레드)

JVM의 스레드 구조 JVM에서의 스레드 구조는 크게 메인 스레드(Main Thread)와 워커 스레드(Worker Thread) 그리고 데몬 스레드(Daemon thread)로 나누어진다. 스레드의 종류 Main Thread (메인 스레드) 자바의 엔트리포인트는 main메소드이다. 즉 자바가 실행되면 무조건 먼저 실행되는 부분은 main메소드이며 이를 실행하는 스레드의 이름은 main thread이다. public class App{ public static void main(String[] args){ String name = Thread.currentThread().getName(); //실행중인 스레드 이름, main thread } } 워커스레드(worker thread) 자바를 멀티스레드 환경..

[Java] Runnable 인터페이스와 Thread 클래스

목차 1. Runnable 인터페이스 2. Thread 클래스 3. 시스템 로드에 따른 JVM의 자동 스레드 관리 자바는 기본적으로 싱글스레드 환경으로 실행된다. 메인 메서드(main method)가 포함된 클래스의 main 스레드가 실행되며, 이는 싱글스레드에서 코드를 순차적으로 실행한다. 만약 멀티 스레드 환경으로 실행하고 싶은 경우 Runnable 인터페이스나 Thread 클래스를 사용한다. 하지만 일부 자바 라이브러리 및 프레임워크 내부에서는 자동으로 멀티스레딩을 사용하여 작업을 실행하기도 한다(Stream API , 스프링 etc) 1.Runnable 인터페이스 The Runnable interface should be implemented by any class whose instances a..

[Java] 스레드의 생명주기(Thread lifecycle, Runnable/Running의 차이점 )

목차 1.스레드 생명주기(Thread lifecycle) 2.Runnable/Running 의 차이점 1. 스레드 생명주기(Thread lifecycle) 스레드는 New, Active(Runnable/Running),Blocked/Waiting,Terminated 의 단계로 구성되어있다. New Thread 인스턴스만 부른 상태이며 아직 스레드를 사용하지 않은 상태 (start() 메소드를 사용하기 전의 상태) Active(Runnable/Running) 실행 가능하거나 실행중인 상태 (start()메소드를 부른 상태) Blocked/Waiting 일시 정지된 스레드 상태( join(),sleep(),wait() 메소드를 사용한 상태 ) 참고로 CPU에서는 waiting 상태의 스레드를 실행시키지 않으..

[Java] 프로세스와 스레드 비교(프로세스/스레드, 싱글/멀티 스레드)

목차 1. 프로세스(Process)와 스레드(Thread) 2. 싱글스레드의 프로세스 3. 멀티스레드의 프로세스 싱글스레드(Single Thread)와 멀티 스레드(Multi Thread)의 차이점을 이해하기 위해서는 프로세스와 스레드의 기본적인 개념부터 이해하고 있어야한다. 따라서 '1.프로세스(Process)와 스레드(Thread)'에 기본 개념을 간단하게 정리해두었다. 스레드에 따른 프로세스의 차이를 정리했다. 1. 프로세스(Process)와 스레드(Thread) 1. 프로세스(Process) : 프로세스는 쉽게 말하면 '컴퓨터에서 실행되고 있는 모든 프로그램'들을 말한다. 다른 말로 '실행 인스턴스'라고도 할 수 있으며, 더 정확한 용어로는 '실행 인스턴스를 나타내는 독립적인 단위'를 의미한다. ..