전체 글 100

Java > Concurrency > Atomic operation, CAS

원자적 연산해당 연산이 더 이상 나눌 수 없는 단위로 수행된다는 것 원자적 연산은 중단되지 않고, 실행되거나 실행되지 않는 성질을 가진다 멀티 쓰레드 환경에서는 다른 쓰레드의 간섭 없이 안전하게 처리됨을 의미한다 원자적 연산int i = 0;원자적 연산 Xi += 1;i++; 원자적 연산이 아니라면 synchronized나 Lock 등을 이용해 안전한 임계 영역을 만들어야 한다AtomicInteger 등 Atomic~멀티 쓰레드 환경에서 안전하게 증감 연산을 수행할 수 있게 해주는 객체 snychronized, ReentrantLock 보다 빠르다 그 이유는 incrementAndGet() 메서드는 락을 사용하지 않고 원자적 연산을 수행하기 때문  https://github.com/venzersiz/le..

Java/Concurrency 2024.10.04

HTML > Favicon

정의Favorite icon의 줄임말웹 브라우저에서 보여지는 웹 사이트를 대표하기 위한 16 x 16 픽셀의 이미지 웹 브라우저 탭 상단, 북마크 바, 방문 기록, 검색 결과, 웹 브라우저 홈 화면 등에서 보여진다 처음엔 ICO 형식의 16 x 16 픽셀 아이콘이 사용되었지만, 웹이 발전하면서 더 큰 사이즈와 여러 이미지 파일 형식을 지원하도록 발전되어 왔다 현재는 웹 사이트의 브랜드 정체성을 나타내고 있다  표준화2005년 W3C가 파비콘에 대한 권고안을 발표했다파일명: favicon.ico위치: 웹 사이트의 루트에 배치 그 후로도 권고안이 갱신되어 왔다  제작 형식크기정사각형이어야 한다파일 크기가 작고 빠르게 로딩되는 것이 중요하다16 x 16, 32 x 32를 가장 많이 사용하고 선호한다 16 x ..

Web Frontend/HTML 2024.09.30

Java > Concurrency > 8. Bounded Buffer/Producer-Consumer problem

멀티 쓰레드의 기본기를 배울 수 있는 가장 좋은 예  구성 요소ProducerConsumerBuffer  문제 상황생산자가 너무 빠를 때버퍼가 가득 차서 더 이상 데이터를 추가할 수 없음버퍼가 빌 때까지 대기소비자가 너무 빠를 때소비자가 대기 Bounded: 경계가 있는, 한계(제한)가 있는버퍼의 크기가 한정되어 있기 때문에 발생하므로 한정된 버퍼 문제라고 한다  BlockingQueue자바는 한정된 버퍼 또는 생산자-소비자 문제를 해결하기 위해 java.util.concurrent.BlockingQueue 인터페이스와 그 구현체들을 제공한다 구현체ArrayBlockingQueueLinkedBlockingQueue BlockingDeque 인터페이스도 있다 큐에 대해서 대기하게 될 때의 동작 방식에 대해..

카테고리 없음 2024.09.30

Java > Concurrency > 7. Synchronization

동시성 문제같은 자원에 여러 쓰레드가 동시에 접근할 때 발생하는 문제 여러 쓰레드가 접근하는 자원을 공유(Shared) 자원이라고 한다. 대표적 공유 자원은 인스턴스 필드이다 쓰레드의 공유 자원에 대한 접근을 동기화하여 동시성 문제를 해결할 수 있다  Critical section임계 영역 여러 쓰레드가 동시에 접근하면 데이터 불일치나 예상치 못한 동작이 발생할 수 있는 위험하고 중요한 코드 부분여러 쓰레드가 공유 자원을 접근하거나 수정하는 부분  동기화(Syncrhonization)여러 쓰레드가 공유 자원에 대해 일관성 있고 안전한 접근을 보장하기 위한 메커니즘 아래 문제를 해결할 수 있다경합 조건(Race condition)여러 쓰레드가 동시에 읽고 쓰는 데이터의 일관성 멀티 쓰레드 환경에서 필수적이..

Java/Concurrency 2024.09.23

Java > Concurrency > 6. Memory visibility

메모리 가시성멀티 쓰레드 환경에서 한 쓰레드가 변경한 값이 다른 쓰레드에게 언제, 어떻게 보여지는지에 대한 문제를 말한다여러 쓰레드가 공유된 하나의 메모리에 접근할 때 이 문제가 발생한다 volatile 키워드를 사용해 문제를 해결할 수 있다https://github.com/venzersiz/learn-java8/blob/master/src/test/java/concurrency/basic/ThreadVolatileTest.java 쓰레드 동기화 기법을 사용할 수도 있다https://github.com/venzersiz/learn-java8/tree/master/src/test/java/concurrency/synchorize  Java Memory Model여러 쓰레드들이 메모리를 공유하고 상호작용하..

Java/Concurrency 2024.09.13

Java > Checked 예외의 재정의

자바의 메서드 재정의 시 규칙Checked(이하 검사) 예외부모 메서드가 검사 예외를 던지지 않으면 재정의된(Overrided) 자식 메서드도 예외를 던질 수 없다자식 메서드는 부모 메서드가 던질 수 있는 검사 예외의 하위 타입만 던질 수 있다Runtime 예외제약없음 대표적으로 Runnable 인터페이스의 메서드 시그너처는 다음과 같다public abstract void run(); 따라서 Runnable 인터페이스를 구현한 클래스가 run() 메서드를 재정의할 때 검사 예외를 던지면 컴파일 에러가 발생한다 Thread 클래스도 Runnable 인터페이스를 구현하고 있으므로 위 제약이 동일하게 적용된다

Java/Java > Basics 2024.09.09

Java > Concurrency > 3. Thread info

쓰레드는 다음과 같은 속성을 가진다idnamestateprioritythreadGroup https://github.com/venzersiz/learn-java8/blob/master/src/test/java/concurrency/basic/ThreadInfoTest.java  Thread priority쓰레드는 우선순위를 가지며, 우선순위 값에 따라 쓰레드가 얻는 실행시간이 달라진다 작업의 중요도에 따라 쓰레드 우선순위를 다르게 설정하여 특정 쓰레드가 더 많은 작업시간을 갖도록 할 수 있다 예를 들어 메신저의 경우, 파일 다운로드를 처리하는 쓰레드보다 채팅 전송 쓰레드의 우선순위가 높아야 채팅이 원활할 것이다(대신 다운로드는 더 오래 걸릴 것이다). 이처럼 UI 관련 쓰레드는 다른 쓰레드보다 우선 순위..

Java/Concurrency 2024.09.05

Java > Memory structure

Run-time data areashttps://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5Method area모든 JVM 쓰레드가 공유 클래스별 구조를 저장런타임 상수 풀(Pool)공통 리터럴 상수클래스 정보클래스의 실행(바이트) 코드필드, 메서드 데이터메서드와 생성자 코드static 영역static 변수 보관 논리적으로 Heap의 부분 메서드 영역의 메모리가 할당 요청을 충족시키지 못하면 JVM은 OutOfMemoryError를 던진다JVM stacks각각의 JVM 쓰레드는 생성될 때 자기만의 스택을 가진다 JVM 스택은 Frame을 저장한다 JVM 스택은 C같은 전통적인 언어의 스택과 유사하다(Stack) frame스택 영역에 쌓..

Java/Java > Basics 2024.09.04

Linux > 압축

zip압축하기zip 목적지 출발지 예) 현재 폴더의 모든 것을 test.zip으로 압축zip test.zip * 만약 현재 폴더에 하위 폴더가 있다면 위와 같이 하면 하위 폴더 내 파일들은 압축이 되지 않는다 하위 폴더의 파일까지 압축하라면 아래와 같이 해야한다zip -r test.zip *압축풀기unzip 압축파일명현재 폴더에 압축을 푼다 지정한 폴더에 압축을 풀려면 아래와 같이 해야한다unzip test.zip -d 폴더명

OS/Linux 2024.09.03