회사에서 파이썬을 이용한 간단한 프로젝트를 하던 도중, aiohttp를 사용하면서 이상한 점을 하나 발견했습니다. http 요청 작업시에 메인 쓰레드를 제외한 여러개의 쓰레드가 추가로 사용되는 것이었는데요, 파이썬의 비동기 작업은 기본적으로 싱글 쓰레드 위에서 비동기 코루틴을 이용해 구현되는게 정상인데, 이게 무슨 일인가 싶어 aiohttp쪽 코드를 뒤져보았습니다. 해답은 DNS Resolver 코드에 있었는데요, aiohttp/resolver.py 코드를 보면 아래와 같은 구문이 있습니다. DefaultResolver = AsyncResolver if aiodns_default else ThreadedResolver aiodns_default가 False인 경우, DNS Resolving을 위해 멀티 ..
▲ 데이터 송신 시 ▲ 데이터 수신 시 좋은 자료라 눈에 익혀두기 위해 공유합니다.
Blocking/Non-Blocking과 Sync/Async는 비슷한 모양새 이지만, 서로 완전히 다른 개념입니다. Blocking과 Non-Blocking은 '프로세스(또는 쓰레드)가 멈춰서 다른 작업을 할 수 없는 방식인지?' 를 말합니다. 예를 들어 Blocking 모델을 사용하는 일반적인 소켓은 recv 함수를 호출할 경우 프로세스(또는 쓰레드) 자체가 Blocking 상태에 빠집니다. 마치 Sleep을 호출한 것 처럼, I/O 작업이 모두 완료되기 전까지 다른 아무런 작업도 할 수 없습니다. 하지만 Non-Blocking 모델을 사용하는 소켓의 경우, I/O 작업의 종료 유무에 상관 없이, 결과값을 바로 반환 합니다.당장 내게 들어온 데이터는 없지만, 언젠간 들어올 것이라고 가정하고 우선 로직을..
C++은 아직까지 다른 언어들처럼(ex. Python의 split) 간결하고 우아한 string split 함수를 제공하지는 않습니다.split을 구현하는 데에는 여러가지 방법이 있지만, 저는 std::getline을 사용하는 방법이 가장 깔끔하다고 생각합니다. 코드는 아래와 같습니다. 12345std::stringstream ss(stringData);while (std::getline(ss, stringData, ',')){ // 이제 stringData가 ,를 구분자로 사용하여 나뉘어집니다.}Colored by Color Scriptercs
- Total
- Today
- Yesterday