목록전체 글 (233)
Life Engineering
Coroutine ContextCoroutineContext는 다음과 같이 코루틴 빌더 함수에 보인다 .. 대체 뭘까?public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Jobpublic fun CoroutineScope.async( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, bl..
코루틴 디스패처 (Coroutine Dispatcher)코루틴 디스패처란?코루틴을 스레드로 보내 실행시키는 역할, 코루틴을 스레드로 보내는 데 사용할 수 있는 스레드나 스레드 풀을 가짐실행 요청한 스레드에서 코루틴이 실행될 수 있게 함→ CoroutineDistpatcher 는 코루틴의 실행을 관리하는 주체로실행 요청된 코루틴을 작업 대기열에 적재하고스레드가 새로운 작업을 시작할 수 있는 상태라면 스레드에 코루틴을 보내 실행함제한된 디스패처와 무제한 디스패처제한된 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한무제한 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한되지 않음 → 실행 요청된 코루틴이 이전 코드가 실행된 스레드에서 계속 실행 됨제한된 디스패처 생성Single-Thread Dispatc..
코루틴 빌더코루틴 빌더 함수 호출 시 새로운 코루틴 생성모든 코루틴 빌더 함수는 코루틴을 추상화한 Job 객체 생성runBlockingpublic actual fun runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T새로운 코루틴을 실행한 뒤 완료될 때까지 현재 스레드를 중단 가능한 상태로 blocking,따라서 runBlocking 내부에서 delay(1000L) 호출 시 Thread.sleep(1000L) 과 비슷하게 작동runBlocking 이 사용되는 경우메인 함수: 프로그램이 끝나는 걸 방지하기 위해 스레드를 블로킹할 필요가 있을 경우유닛 테스트현재는 거의 사용되지 않고 유닛 테스트에는 runTest ..
Chapter 1: 스레드 기반 작업의 한계와 코루틴의 등장멀티 스레드 프로그래밍단일 스레드일 경우 작업을 순차적으로 처리해야 하므로 처리 속도, 응답속도 늦어짐 → 해결 방안으로 멀티 스레드 등장여러 개의 스레드로 작업을 실행 하여 메인 스레드에 처리가 오래 걸리는 작업이 요청 되었을 때 그 작업을 백그라운드 스레드로 돌려서 처리하도록 함멀티 스레드 구현 방식Thread Classpackage chapter1.code5import kotlin.concurrent.threadfun main() { println("[${Thread.currentThread().name}] 메인 스레드 시작") thread(isDaemon = false) { println("[${Thread.currentThrea..
https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { int[] cost = new int[3000001]; static class Item implements Comparable{ int number; int dist; Item(int number, int dist){ this.number = number; this.dist = dist; } @Override public int ..
OS 정리 세마포어와 뮤텍스 공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다. 이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다. 뮤텍스(Mutual Exclusion) Lock을 가지고 있는 프로세스/스레드만이 lock해제가 가능하다 Locking Algorithm으로 락 가지고 있는 프로세스/스레드가 임계영역 나갈 때만 해제가 가능 Busy Waiting(SpinLock) - lock이 얻어질 때까지 계속 체크하는 것 세마포어 카운터 변수 ⇒ 운영체제 또는 커널에 저장 wait() : 가능한지 체크, 가능하면 카운터변수 -1, signal(): critical section에서 나올때 s를 1 증가 카운터 변수 값 자연수 가능 ⇒ 즉 여..
C언어 컴파일 과정 https://gracefulprograming.tistory.com/16 전처리 과정 헤더 파일 삽입 - #include 만나면 전처리기가 헤더파일 찾아서 내용 삽입 매크로 치환 및 적용 - #define된 부분 심볼 테이블에 저장, 문자열 만나면 #define된 내용으로 치환 컴파일 과정 전반부: 소스코드 오류 분석, 트리 형태로 표현 중단부: SSA 형태로 변환 → 최적화 → 고급 언어, 어셈블리 언어의 중간형태로 변환 후반부: 최적화 → 어셈블리어로 구성된 .s 파일이 만들어짐 어셈블 과정 어셈블러에 의해 어셈블리 코드 → 기계어로 변환 목적코드(helloworld.o) 파일은 명령어(Instruction)와 데이터(Data) 가 들어있는 ELF 구조를 가짐 링킹 과정 오브젝트..
https://www.acmicpc.net/problem/13702 13702번: 이상한 술집 프로그래밍 대회 전날, 은상과 친구들은 이상한 술집에 모였다. 이 술집에서 막걸리를 시키면 주전자의 용량은 똑같았으나 안에 들어 있는 막걸리 용량은 랜덤이다. 즉 한 번 주문에 막걸리 용 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_BOJ_13702 { static int max_val=Integer.MAX_VALUE; static int N, K; static int[]..
https://programmers.co.kr/learn/courses/30/lessons/42627?language=java# 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr import java.util.*; class Solution { public int solution(int[][] jobs) { int answer = 0, time=0; PriorityQueue req=new PriorityQueue(new Comparator(){ //요청시간 빠른순으로, 같을 때에는 소요시간 적은 순으로 p..
https://programmers.co.kr/learn/courses/30/lessons/60062 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하 programmers.co.kr import java.util.*; class Solution { static int answer=Integer.MAX_VALUE; static ArrayList perms=new ArrayList(); public int solution(int n, int[] weak, int[] dist) { int[] w=new int[weak.length+weak.len..