일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- toolnode
- langgrpah
- conditional_edge
- humannode
- 밑바닥부터시작하는딥러닝 #딥러닝 #머신러닝 #신경망
- add_subgraph
- 강화학습의 수학적 기초와 알고리듬 이해
- conditional_edges
- subgraph
- REACT
- langgraph
- pinecone
- Ai
- removemessage
- tool_calls
- 추천시스템
- summarize_chat_history
- human-in-the-loop
- tool_binding
- LangChain
- 강화학습의 수학적 기초와 알고리듬의 이해
- lcel
- Python
- rag
- update_state
- RecSys
- chat_history
- rl
- 밑바닥부터 시작하는 딥러닝
- 강화학습
- Today
- Total
목록Today I Learned/동시성 프로그래밍 (6)
타임트리
앞선 게시물들에서 살펴본 것처럼 동시성이란 여러 작업을 스위칭하며 처리하는 것을 의미한다. 따라서 동시성 프로그램을 사용하면 네트워크 I/O와 같이 요청/응답 과정에서 효율적으로 코드를 설계할 수 있다. 그런데 여기서 생각해볼 점이 있다. 기존처럼 순차적으로 진행했던 동기적 코드보다 항상 비동기적 코드가 좋을까? 정답은 그렇지 않다는 것이다. 예를 들어, CPU 연산이 많은 프로그램을 생각해보자. 이러한 경우 하나의 CPU가 쭉 계산하는 것과 여러 스레드에 동시성으로 작업하는 것과 차이가 없을 것이다. 오히려 여러 excutor로 작업을 할당하는 연산이 추가되어 더 오래 걸릴 것이라 예상할 수 있다. 이러한 경우에는 동시성 보다는 병렬성으로 작업을 수행해야 속도를 향상시킬 수 있다. 그런데 파이썬은 ..
동시성은 Concurrency, 병렬성은 Parallelism을 번역한 용어로 둘은 다른 개념이다. 이 둘의 차이에 대해서 알아보자.먼저 동시성과 병렬성의 정의는 다음과 같다.동시성(concurrency): 한 번에 여러 작업을 동시에 다루는 것 (switch의 개념)병렬성(parallelism): 한 번에 여러 작업을 병렬적으로 처리하는 것 (at the same time의 개념)좀 더 쉽게 말하면, 동시성은 시간과 관계없이 여러 작업이 처리되고 있는 상태를 만족하는 것을 의미하고, 병렬성은 시간상 동시에 처리되고 있는 것을 의미한다. 아직 조금 헷갈리는 것 같다. 주문을 받아 요리사가 요리를 하는 예시를 통해 이해해보자. 현재 상황은 요리사에게 ["파스타", "피자", "스테이크"] 주문이 들어온 상..
프로그램의 사전적 정의는 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체이다. 즉, 간단히 말해 개발자가 작성한 코드들을 의미한다.이러한 프로그램은 보조메모리(HDD, SDD)와 같은 저장장치에 보관되고 있다가 사용자가 실행하면 해당 프로그램 코드들이 주메모리(RAM)에 적재되어 작업이 진행된다. 이때 프로그램이 RAM에 올라온 상태가 되면 이를 프로세스(process) 라고 한다.프로그램: 명령문이 저장장치에 저장된 정적인 상태프로세스: 실행을 위해 프로그램이 RAM에 올라온 동적인 상태이처럼 프로그램을 실행하여 프로세스가 생성되면, CPU는 프로세스가 해야할 작업을 수행한다. 이때, CPU가 처리하는 프로세스의 작업 단위를 스레드(thread) 라고 한..
먼저 코루틴을 보기 전에, 루틴을 정의하고 이로부터 파생되는 메인 루틴과 서브 루틴을 살펴보자.루틴: 일련의 명령 즉, 코드의 흐름메인 루틴: 프로그램의 메인 코드 흐름서브 루틴: 하나의 진입점(args)과 하나의 탈출점(return)이 있는 루틴으로, 흔히 아는 함수나 메서드 (메인 루틴의 보조)그럼 메인 루틴과 서브 루틴의 관점에서 이전에 작성했던 코드를 다시 살펴보자. 아래 코드에서 메인 루틴은 if __name__=="__main__" 절의 내용이며, 여기서 main()과 delivery() 두 개의 서브 루틴이 존재한다.import time# 서브 루틴 1def delivery(name, mealtime): print(f"{name}에게 배달 완료") time.sleep(mealtim..
동기와 비동기동기(Sync)와 비동기(Async)코드가 동기적으로 동작한다는 말은, 코드가 반드시 작성된 순서대로 실행되는 것을 말한다. 반대로 코드가 비동기적으로 동작한다는 말은, 코드가 반드시 작성된 순서 그대로 실행되는 것이 아니라는 것을 의미한다.이해를 위해 짜장면을 배달하는 배달원의 예시를 들어보자. 하나의 주문에서 배달원이 처리해야 하는 일은 아래와 같이 두 가지가 있다.짜장면을 주문자에게 배달주문자가 다 먹은 그릇을 현관 앞에 놔두면 그릇을 수거만약 주문자가 3명(A, B, C)의 주문이 접수되어 배달부가 A, B, C의 짜장면을 음식점으로부터 받은 상황이라고 하자. 이때, 위 작업을 동기 방식과 비동기 방식의 관점으로 바라보자. 동기 방식의 경우, 순차적으로 작업이 진행되기 때문에 A에게 ..
바운드CPU 바운드프로그램이 실행될 때, 실행 속도가 CPU 속도에 의해 제한되는 것을 CPU 바운드라고 한다. 즉, 프로그램이 실행될 때 I/O wating보다 CPU의 계산 시간이 길어 프로그램이 잠시 멈추게 되는 것을 의미한다. 아주 복잡한 수학 수식을 계산하는 경우 컴퓨터 실행속도가 느려지게 되는 현상을 말한다. 알고리즘을 공부할 때 마주치는 시간복잡도를 생각해보면 이해하기 쉽다.예를 들어, 아래와 같이 1부터 100까지 for문이 3번 중첩된 아래 코드를 실행한다고 해보자.def cpu_bound(num: int): total = 1 arrange = range(1, num+1) for i in arrange: for j in arrange: fo..