# * uvloop
uvloop๋ asyncio์ ์ด๋ฒคํธ ๋ฃจํ ๋์ฒด์ฌ๋ก, asyncio๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ณ , nodejs, gevent ๋ฐ ๋ค๋ฅธ python ํ๋ ์์ํฌ์ ๋น๊ตํด๋ด๋, 2๋ฐฐ์ด์์ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค๋ค.
TIP
python3.5 ๋ถํฐ ํ์ด์ฌ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐ๋ asyncio๋ ๋น๋๊ธฐ I/O ํ๋ ์์ํฌ์ด๋ค.
# asyncio & uvloop
asnycio๋ ๋คํธ์ํฌ ์ ์ก, ํ๋กํ ์ฝ ๋ฐ ์คํธ๋ฆผ ์ถ์ํ ์ปฌ๋ ์ ๊ณผ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ, ์ด๋ฒคํธ ๋ฃจํ๋ asyncio์ ํต์ฌ์ด๋ค. asyncio์ ์ฃผ์๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค์ผ์ค๋ง์ ์ํ ํธ์ถ
- ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- DNS ์ฟผ๋ฆฌ์ํ
- OS ์ ํธ ํธ๋ค๋ง
- ์๋ฒ์ ์ปค๋ฅ์ ์ ๋ง๋๋ ํธ๋ฆฌํ ์ถ์ํ
- ๋น๋๊ธฐ์ ์๋ธํ๋ก์ธ์ค
uvloop๋ asyncio์ ๋ด์ฅ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๋์ฒดํ๋ฉฐ ์ค์น๋ฐฉ๋ฒ ๋ค์๊ณผ ๊ฐ๋ค.
pip install uvloop
asyncio ์ฝ๋์ uvloop๋ฅผ ์ ๋ชฉํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
import asyncio, uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
2
ํด๋น ์ฝ๋๋ asyncio.get_event_loop()
๋ฅผ ํธ์ถํ๋ฉด, uvloop์ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ๊ฒ ๋ง๋ ๋ค.
# ์ํคํ ์ฒ
uvloop๋ libuv๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Cython์ผ๋ก ์์ฑ๋์๋ค. libuv๋ nodejs์์ ์ฌ์ฉํ๋ ๊ณ ์ฑ๋ฅ ๋ฉํฐ ํ๋ซํผ ๋น๋๊ธฐ I / O ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ, ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ค. nodej๊ฐ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ๋๋ฆฌ ๋ณด๊ธ๋ ์ด์ ๊ฐ libuv ๋๋ถ์ด๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋ค.
# ๋ฒค์น๋งํฌ
# TCP ๋ฒค์น๋งํฌ
- ๊ณตํต์กฐ๊ฑด
- Intel Xeon CPU E5-1620 v2 @ 3.70GHz
- Ubuntu Linux
- 1, 10, 100 KiB ํฌ๊ธฐ์ ๋ฉ์์ง
- ๋์์ฑ์์ค: 10
- ๋ฌ๋ํ์ : 30s
- asyncio, uvloop
- Python 3.5
- Go
- GOMAXPROCS = 1
net.Conn.Read/Write
ํธ์ถ
- nodejs
- No cluster
- v4.2.6
# TCP ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ
# HTTP ๋ฒค์น๋งํฌ
- ์กฐ๊ฑด
- ๋์์ฑ์์ค: 300
- ๋ฌ๋ํ์: 30s
# HTTP ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ
๊ณ ์ฑ๋ฅ HTTPํ์์ ๋์์ ๋ฐ๋ asyncio๋ ๋์ผํ HTTPํ์๋ฅผ ์ด์ฉํ๋ nodejs๋ณด๋ค ๋น ๋ฅด๋ค. ์ฌ์ง์ด uvloop๋ฅผ ํ์ฌํ ๊ฒฝ์ฐ, nodejs์ ์ฝ 2๋ฐฐ, Go์ ๋น์ทํ ์์ค์ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ ์๋น์ค ํ์ง์ ๋งค์ฐ ์ฐ์ํ๋ค๊ณ ํ ์ ์๋ค.
httptools ๊ธฐ๋ฐ ์๋ฒ๋ ๋ค๋ฅธ ๊ตฌํ๊ณผ ๋ฌ๋ฆฌ ๋ผ์ฐํ ๋ก์ง์ ํฌํจํ์ง ์์ ๋งค์ฐ ๋ฏธํกํ๋, ํด๋น ๋ฒค์น ๋งํฌ๋ ํจ์จ์ ์ผ๋ก ๊ตฌํ ๋ ํ๋กํ ์ฝ๋ก uvloop๊ฐ ์ผ๋ง๋ ๋น ๋ฅผ ์ ์๋์ง ๋ณด์ฌ์ฃผ๊ณ ์๋ค. ํด๋น ๋ฒค์น๋งํฌ์ ์๊ฐ์ ๋ฐ์ ํ์ํ Python ์นํ๋ ์์ํฌ๊ฐ ๋ฐ๋ก Sanic์ด๋ค.
aiohttp
aiohttp๋ ๋น๋๊ธฐ HTTP ์๋ฒ๋ฅผ asyncio๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ด๋, HTTP parser๋๋ฌธ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ์๋ค. ํด๋น ๋ถ๋ถ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด, Nginx ์ฉ์ผ๋ก ๊ฐ๋ฐ ๋ nodejs HTTP ํ์ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ httptools๋ฅผ ์ด์ฉํ์๋ค.