일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- k8s
- theming
- g 단위테스트
- 자바
- ReactiveProgramming
- 코틀린
- 병렬프로그래밍
- Compose
- Coroutine
- 병럴프로그래밍
- Kotlin
- android
- 책
- 글또
- 안드로이드강좌
- Rxjava
- 커스텀상태
- 안드로이드
- 알게되는
- Gradle
- viewmodel
- 스레드
- 안드로이드스튜디오
- 회고
- 테스트
- 코루틴
- 디자인패턴
- kotlin강좌
- mockito
- 알고리즘
- Today
- Total
목록일상 (61)
선생님, 개발을 잘하고 싶어요.
스레드 안전성 확보한 컴포넌트를 안전하게 서로 연결해 사용한다면 규모 있는 컴포넌트나 프로그램을 좀 쉽게 작성할 수 있을 것 스레드 안전한 클래스 설계 🌟 스레드 안전성 확보할 때 고려사항 객체의 상태를 보관하는 변수는? 그 변수가 가질 수 있는 값의 범위는? 객체 내부 값을 동시에 사용할 때 그 과정을 관리할 정책은? 객체 상태는 내부 변수에 의해서 결정된다. 동기화 정책 👉 값이 계속 변하는 상황에서도 값을 안전하게 사용하도록 조절하는 방법 객체 불변성, 스레드 한정, 락 등 어떻게 사용해야 스레드 안전성을 확보할 수 있는지 명세 어떤 변수를 어떤 락으로 막아야 하는지 명세 (e.g. @GuardedBy) 동기화 요구사항 정리 스레드 안전성을 확보했다? 👉 여러 스레드가 동시에 클래스를 사용하는 상황..
여러 개의 스레드에서 객체를 동시에 사용하려 할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법을 살핀다. 크리티컬 섹션? 코드 블록을 동기화할 때 항상 메모리 가시성(Memory Visibility) 문제가 발생한다. 반드시 달성돼야 하는 거 변수를 사용하고 있을 때 다른 스레드가 해당 변수 값을 사용하지 못하도록 막아야한다. 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 값을 즉시 사용할 수 있어야한다. 가시성 변수에 값을 저장하고 이후에 값을 다시 읽으면, 아까 저장한 값을 가져올 수 있을거라고 예상한다. 하지만 멀티 스레드 환경에서는 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 없을 수 있다. 심지어 값을 읽지 못할 수 있다. 🌟 메모리상 공유된 변수를..
공유되고 변경할 수 있는 상태에 대한 접근을 관리하는 것이다. 공유됐다 👉 여러 스레드가 특정 변수에 접근할 수 있다. 변경할 수 있다(mutable) 👉 해당 변수 값이 변경될 수 있다는 뜻이다. 스레드 안정성은 코드를 보호하는 게 아니라, 데이터에 제어 없이 동시 접근하는 걸 막으려는 의미 스레드가 하나 이상 변수에 접근하고 + 변수에 값을 쓰면 👉 해당 변수에 접근할 때 관련된 모든 스레드가 동기화를 통해 조율해야 한다. 🌟 어떤 스레드가 변경할 수 있는 상태 변수를 적절한 동기화 없이 접근한다면 그 프로그램은 잘못됐다. 이런 문제를 해결하는 3가지 방법이 있다. 변수를 스레드 간에 공유하지 않는다. (스택에 저장된 변수 접근 등) 변수를 변경할 수 없도록 만든다. 접근할 땐 언제나 동기화를 사용한..
작업을 동시에 실행하는 일에 대한 간략한 역사 운영체제: 여러 개의 프로그램을 각자의 프로세스 내에서 동시에 실행 프로세스: 각자가 서로 격리된 채, 독립적으로 실행되는 프로그램 운영체제가 프로세스마다 메모리, 파일 핸들, 보안 권한등의 자원을 할당한다. 프로세스간 통신: 소켓, 시그널 핸들러, 공유 메모리, 세마포어, 파일 등으로 통신 프로그램 동시 실행으로 해결하는 문제들 자원 활용 IO 대기와 같이 유용하지 않은 일을 하며 자원을 점유하고 있으면 비효율적이다. 차라리 다른 프로그램을 사용하는 게 바람직하다. 공정성 한 프로그램을 모두 끝내야 다른 프로그램을 시작하는 것 보다는 더 작은 단위로 컴퓨터를 공유하는 게 바람직하다. 편의성 여러 작업을 전부 처리하는 하나의 프로그램을 작성하는 것보다 각기 ..