분류 전체보기

=> 동시성 문제는 비교착상태, 교착상태 이 두 가지로 나뉜다.1. 비교착 상태 문제1-1. 원자성 위반 오류=> 원자성 위반 오류는 문맥 교환이 발생하지 않을 것이라 생각하여 발생한다.=> 단순 +1 연산이라도, OS 단에서는 3가지의 명령으로 또 나뉠 수 있다.=> 이러한 과정을 생각하지 못했을 때 발생하는 오류가 원자성 위반 오류이다.Thread 1=> if 문으로 NULL이 아님을 확인한다.=> fputs 함수는 proc_info를 참조한다.Thread 2=> proc_info를 NULL로 한다. => 이제 이 과정을 섞어보자.=> 실제로 문맥 교환은 언제 어디서 일어날 줄 모른다.Thread 1=> if 문으로 NULL이 아님을 확인한다.Thread 2=> proc_info를 NULL로 한다...
· 알고리즘
https://www.acmicpc.net/problem/16235이 문제는 개극혐이다.그냥 구현이다. 클래스를 나누고 메서드를 나누면 쉽게 풀린다.다만, 시간이 엄청 오래걸린다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { /** * 봄 => 나이만큼 양분먹음, 나이 1증가, 여러개의 나무 가능, 양분못먹으면 죽음 * => 나이대로 정렬이 필요 특정 시점부터 여름 적용 필요 * 여름=> 죽은 나무 양분됨. 죽은나무 나이/2가 양분으로 추가됨 * => 봄에서 한 번에 처리 * 가을=..
=> CPU 사용량이 많은 서비스나 로직 등을 실행할 때, 스핀을 통한 락 프리 알고리즘을 사용하게 되면, CPU 사용량이 증가하고, 스핀 시간동안 시간을 낭비하게 된다.=> 어차피 오랜 시간 CPU를 하나의 쓰레드가 잡고 사용할 때는, 그 연산에 집중할 수 있게, 다른 쓰레드를 블록함으로 정합성도 챙 기고, 스핀으로 인한 시간 낭비를 제거함으로 더 효율적으로 연산을 처리할 수 있다.=> 이때, I/O와 같은 CPU 처리가 아닌 처리가 있다면, 블록을 통해 CPU 처리를 멈추고, 디스크 드라이버 처리로 전환한다.=> 이어서, 다른 쓰레드가 락을 획득 후 CPU 처리를 한다.=> 락은 임계 영역의 동시성을 책임진다.1. 뮤텍스와 컨디션 변수, 모니터 락=> 위에서 언급한 것처럼 뮤..
· 알고리즘
https://www.acmicpc.net/problem/17609이번 문제는 유연한 사고가 필요한 문제였다.건너뜀을 재귀로 처리하면 아주 쉽게 풀리는 문제였다.문제 분류를 보고 투포인터로만 풀어보려고 하는 오류를 범하고 말아따~ import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { static int T; static String[] str; static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); public static void ..
1. 이 개념으로 어떻게 최적화를 할 수 있을까?=> 트랜잭션을 적용=> 비즈니스 로직 특성을 고려하여, 발생할 수 있는 이상현상 체크=> 락이나, Lock-Free 등의 정합성을 해결할 수 있는 방법을 고안=> 적용 2. JPA에서의 트랜잭션 격리 수준 적용 과정=> Spring Boot + JPA에서는 커넥션 생성 비용을 줄이기 위해 Connection Pool에 Connection들을 생성해 저장해둠=> @Transactional(isolation = Isolation.{사용할 격리 수준}) 으로 격리 수준 선언=> Connection을 ConnectionPool에서 가져온 후 Connection.setTransactionIsalation() 메서드로 격리 수준 설정=> 비즈니스 로직 수행=> 커밋..
AtomicIntegerint 값을 원자적으로 다룸AtomicLonglong 값을 원자적으로 다룸AtomicBooleanboolean 값을 원자적으로 다룸AtomicReference객체 참조를 CAS로 변경AtomicStampedReference참조 + 버전(stamp) 을 같이 CASAtomicMarkableReference참조 + boolean 마크를 같이 CASAtomicIntegerArrayint[] 배열의 원소를 CAS로 다룸AtomicLongArraylong[] 배열의 원소를 CAS로 다룸AtomicReferenceArrayT[] 배열의 원소를 CAS로 다룸AtomicIntegerFieldUpdater객체 내 int 필드 업데이트용AtomicLongFieldUpdater객체 내 long 필드 ..
우선 순위대로 차례로 정리해본다.각 번호(대 분류)마다, 순서대로 고려. 번호-n(소 분류)마다, 상황에 따라 고려. 1. DB 최적화, 자료구조(운영체제 공부, DB 공부 선행할 것)=> 기본적인 속도를 높여 최적화한다.=> 데이터 구조 자체를 효율적으로 해야 한다.1-1. 인덱싱1-2. 파티셔닝1-3. 정규화 vs 반정규화1-4. 조회/갱신 쿼리 튜닝1-4-1. JOINhttps://icanchangeworld.tistory.com/167 인덱스를 탈 수 있는 쿼리에서는 옵티마이저는 무조건 NLJ 방식을 사용한다.=> NLJ는 Nested Loop Join으로 그냥 루프를 돌려 조인을 수행한다고 보면 된다.1-1. NLJ는 " data-og-host="icanchangeworld.tistory.co..
추상화란?복잡한 자료, 시스템에 대해 핵심적인 기능만 드러내고, 세부적인 사항들은 감추는 것을 말한다. 우리 사회에서는 여러가지로 추상화된 것들을 볼 수 있다.버스를 탈 때, 그저 '카드를 찍음'이라는 행동으로 승차 권한을 얻을 수 있다.사진을 찍을 때, '터치 함'이라는 행동으로 사진을 저장할 수 있다. 우리는 모든 것에 대한 전문가가 아니기 때문에, 추상화된 것들을 보고 사용하며 살아간다.추상화라는 개념은 이처럼 전문가가 아닌 사람에게도, 많은 경험을 선사할 수 있게 한다. 하지만, 추상화를 함으로 많은 오류를 범하게 된다.이러한 것들을 '일반화의 오류'라고 부른다.일반화의 오류란 특정 사례를 근거로 전체를 단정짓거나 일반화를 하는 것을 말한다. 세상의 사건들은 다양하고, 기적적인 요소들의 협력에서 ..
쥐4
'분류 전체보기' 카테고리의 글 목록 (3 Page)