[t:/]$ 지식_

libevent로 통신 프로그램 편하게 짜기

2016/11/11

어제 libevent를 이용한 고성능 시퀀스 넘버 제네레이터를 짜보고 이를 github에 올린 후기를 써본다.

그동안 수많은 개발자들이 socket 프로그래밍을 할 때마다 골을 때렸던 부분이라면 단연코 비동기 처리, select, poll 부분 이었을 것이다. libevent는 나온지 꽤 시간이 흘렀음에도 불구하고, 리눅스(유닉스) 시스템 프로그래밍을 안내하는 많을 글들이 primitive하게 작성된 고로, libevent를 도입하는 것을 어렵다고 생각하거나 존재를 모르는 경우가 많다.

libevent를 사용하면, 1. 쉽게 비동기 처리를 할 수 있다. 2. 타임아웃 처리 등의 고통에서 해방된다. 3. select, poll 에 대해서 대략 몰라도 된다.

주의할 점이라면 절차적 프로그래밍에 익숙한 사람은 read - write를 한 텀으로 보는 경향이 있는데 각각이 비동기라는 점을 주의할 필요가 있다.

그 유명한 memcached가 libevent를 사용하고 있으며, libevent의 홈페이지에 따르면 성능도 훌륭하다고 하고 있으며, 실제로 memcached의 성능은 매우 훌륭하다. 싱글 쓰레드인 redis보다 memcached가 빠르다고 알려져있다. (뭐 그게 꼭 싱글 쓰레드에 native nonblock 처리를 해서 그런 것은 아니지만)

요점은, libevent를 잘 쓰면 memcached 만큼 빠른 서버 데몬을 짤 수 있다는 것이다. 어제 내가 짰던 seqgen는 아마도 memcached 보다 빠를 것이다. 왜? 하는 일이 없어서. 겨우 번호 따 주는 일이나 하는데 느리면 뭣허러 만드나.

공식 홈페이지에 아주 좋은 예제와 멀티쓰레드 예제가 있으니 참고하면 뭐든 만들 수 있다. SO_REUSE 관련 버그가 한 줄 있는데 찾아보세욤.

끗.





공유하기













[t:/] is not "technology - root". dawnsea, rss