| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Algorithm
- HashMap
- MySQL
- 원격 데스크탑
- Set
- Split
- in
- Rust
- generic
- 메소드
- stack
- 알고리즘
- 러스트
- 환경설정
- Sort
- MongoDB
- numpy
- matplotlib
- array
- pandas
- 연관 함수
- 소유권
- join
- MySQL 서버 구축
- Python
- 파이썬
- list
- 구조체
- heap
- react
- Today
- Total
목록Programming Language/Rust (22)
미생
요약핵심 차이: tokio::sync::mpsc::unbounded_channel은 async 런타임(태스크/워커)의 작업 대기(wake)를 지원하는 비동기(비차단) 채널입니다. crossbeam_channel::unbounded은 스레드 기반(블로킹) 채널로 고성능의 스레드 간 통신용입니다.왜 둘 다 쓰나: 코드베이스에서 네트워크/비동기 작업은 Tokio 런타임에서 동작하므로 Tokio 채널을 사용하고, 내비게이션 계산처럼 별도 OS 스레드에서 블로킹 방식으로 처리하는 부분은 crossbeam을 사용합니다.비교 (요점)용도:tokio::sync::mpsc::unbounded_channel: async 컨텍스트(비동기 태스크) 내에서 사용. Receiver::recv().await로 await 가능해서 ..
1. crossbeam_channel의 내부 구현crossbeam_channel::unbounded는 내부적으로 lock-free 자료구조를 사용합니다. 여러 스레드/태스크가 동시에 접근해도 원자적(atomic) 연산으로 안전하게 처리됩니다.2. Send + Sync 특성let (net_message_sender, net_message_recver) = crossbeam_channel::unbounded::();net_message_sender는 Send + Sync를 구현하므로 여러 스레드/태스크에서 안전하게 공유 가능net_message_recver는 Send만 구현하지만 (여기선 단일 consumer), 어느 한 스레드에서만 소비하므로 안전3. 코드에서의 사용 패턴// Gateway(비동기 I/O ..
Tokio란?Tokio = 비동기 I/O + 태스크 스케줄러 + 타이머를 제공하는 런타임 라이브러리Rust에서 async/await와 함께 사용되어 비동기 코드를 실행 가능하게 하는 환경을 만들어 줌즉, 단순히 함수나 구조체를 제공하는 라이브러리가 아니라,Future를 실제로 실행하고 스케줄링하는 런타임 역할을 함 Tokio의 구성 요소태스크 스케줄러(Task Scheduler)Future를 스레드 풀에서 실행Cooperative multitasking 방식한 스레드에서 여러 태스크를 효율적으로 처리비동기 I/OTCP/UDP, 파일, 타이머 등 비동기 I/O 지원OS의 epoll(kqueue, IOCP) 등을 기반으로 이벤트 처리타이머 & Delay비동기 sleep, interval, timeout 처리..
■ 스마트 포인터 스마트 포인터는 메모리의 주소 값을 갖는 변수로 알고 있는 포인터처럼 동작합니다. 또한 빌리기만 하는 참조자와 달리 가리키고 있는 데이터를 소유하며, 추가적인 메타데이터와 기능들을 가지고 있는 데이터 구조입니다. 스마트 포인터는 기본적으로 구조체(Struct) 형으로 정의하며, Deref(std::ops::Deref) 와 Drop(std::ops::Drop) 트레잇을 구현해야 합니다. Deref 트레잇은 스마트 포인터의 인스턴스가 참조자처럼 동작하도록하고, Drop 트레잇은 스마트 포인터의 인스턴스가 스코프 밖으로 벗어났을 때 스마트 포인터의 메모리와 소유권을 정리하고 원하는 로직을 커스터마이징 할 수 있도록 합니다. 자세한 사용 예시는 Box 와 동일한 스마트 포인터를 만들어보면서 설..
■ anyhow anyhow는 std::error::error 트레잇의 바운드 작업을 통해 에러를 처리하기 때문에 Rust 응용 프로그램에서 발생할 수 있는 관용적인 오류를 쉽게 처리할 수 있으며, 다양한 기능을 제공합니다. ◆ anyhow! anyhow 메크로는 인자로 &str, String, std::error::error 트레잇에서 취급하는 모든 에러 타입을 사용할 수 있습니다. 반환값은 anyhow::Error 타입입니다. use anyhow::{anyhow, Error}; // &str 사용 예시 fn anyhow_test() -> Result{ return Err(anyhow!("test error")); } // String 사용 예시 fn anyhow_test() -> Result{ ret..
■ 트레잇 트레잇은 타입들이 공통적으로 갖는 동작에 대해 추상화하도록 해줍니다. 이는 Java의 Interface에서 추상화 함수를 정의함으로써 강제력을 제공하는것과 유사합니다. 트레잇을 제네릭 파라미터의 타입으로 사용하는 상황에서 트레잇 바운드를 통해 서로 다른 구조체에 연관성을 제공할 수 있습니다. ◆ 트레잇 구현 Animal 트레잇 타입으로 구현한 Dog는 추상화된 custom_bark 메소드와 구현된 common_bark 메소드 두가지 메소드를 갖습니다. custom_bark 메소드는 Dog 구현부(impl)에서 강제적으로 정의가 되어야 하지만, common_bark 메소드는 정의하지 않고 Animal 트레잇 타입으로 구현한 모든 구조체에서 사용할 수 있습니다. trait Animal{ // 선언..