전체 글 216

넌블러킹 소켓

socket() 으로 생성되는 소켓은 기본값으로 Blocking 소켓이다. 하지만 이미 생성된 소켓을 fcntl() 함수를 사용하여 nonblocking socket으로 변경 가능하다. ※ Blocking Socket(B)/Nonblocking Socket(N) (여기서 errno는 errno.h를 인클루드해야 이용할수 있다.) - read B : read 버퍼가 비어있을때 block N : read 버퍼가 비어있을때 -1 return, errno==EWOULDBLOCK/EAGAIN * Blocking socket의 경우에 read 버퍼에 존재하는 데이터의 크기가 read시 요청한 데이터의 크기보다 작은 경우라도 read 버퍼에 존재하는 데이터만큼 리턴되며 block 되지 않음. - write B : w..

Public/tip & tech 2009.12.22

네트워크 함수의 Blocking/Non Blocking I/O" 동작

어찌보면 당연한 건데, 오해를 갖기 쉬운 "네트워크 함수의 Blocking/Non Blocking I/O" 동작들을 정리해 보았습니다. 1. 입력함수: read, readv, recv, recvfrom, recvmsg Blocking TCP 소켓인 경우, 소켓수신버퍼에 수신된 데이터가 없으면, 프로세스는 sleep한다. 데이터가 도착하면 (그것이 충분한 크기가 아닐지라도) 프로세스는 깨어난다. 원하는 크기만큼 도착할때까지 기다리려면, while로 계속 받아 붙이던가, 아니면, MSG_WAITALL 플래그를 이용한다. UDP 소켓인 경우, 소켓수신버퍼가 비어 있으면, 프로세스는 sleep한다. UDP패킷이 도착하면, 프로세스는 깨어난다. Nonblocking 소켓의 경우, 수신버퍼가 비어 있는 경우, 에러..

Public/tip & tech 2009.12.22

[개발 팁]개발시 성능 시험 이슈에 대한 팁 공유

이 메일은 제가 근무하는 필링크 전사메일로 뿌린 내용입니다. 안녕하세요. LGT WAP20 프로젝트를 진행하고 있는 전성현 과장입니다. 많은 분들이 개발이 완료되고 기능시험을 무난히 통과 한 후 성능시험을 진행하다 예상치 못하게 성능이 안나와 고전하신 적이 많으실 거라 생각되어 팁 공유차원에서 메일을 드립니다. 사실 우리가 격는 성능 이슈의 많은 부분을 차지하는 것이 1. 메모리 누수 2. 과도한 CPU 사용으로 인한 TPS 저하 입니다. 1번은 2번에 비해 찾기가 오히려 쉬우므로 넘어가겠습니다. 11월경 LGT WAP20 IP 인증 구조개선 프로젝트에 대한 성능 시험이 있었습니다. 문제가 되었던 것이 구조개선 전 1700 TPS 의 성능을 자랑하던 WAP G/W 가 TPS 1000 을 못넘고 700 에..

Public/tip & tech 2009.12.18

나의 친구, 중년에게 보내는 편지

명함 없어도, 돈 없어도 우리를 진짜 살고 싶게 만드는 것을 찾자 새벽에 자꾸 잠을 깬다. 내일 일을 제대로 하려면 좀 더 자야 하는데…. 그러나 이렇게 한번 깨면 다시 잠들기가 여간 어려운 게 아니다. 특별히 걱정할 일도 없는 것 같은데, 가슴이 자꾸 답답해온다. 피곤한 아내가 잠을 깰까 싶어 슬그머니 침대에서 나온다. 거실 창문 밖은 아직 캄캄하다. 동틀려면 아직 멀었다. 아이들 방에 들어가 곤히 자고 있는 아이들의 얼굴을 바라본다. 손과 얼굴을 가만히 만져보면 허전한 마음이 조금은 가라앉는다. 아이들은 이 세상에 내가 존재해야 하는 이유다. 그렇게 생각하면 쓸쓸함이 조금 가신다. 그러나 아이들은 여전히 꿈에 젖어 뒤척일 뿐이다. 아이들이 잠을 깰까 다시 방문을 닫고 나온다. 거실 소파에 앉아 창밖을..

프로세스간 통신 UDS

UDS UDS(Unix Domain Socket)은 내부 프로세스들 끼리 TCP 또는 UDP 프로토콜을 이용하여 통신할 수 있도록 도와주는 소켓입니다. 이 소켓을 이용하시면 기존의 TCP/IP, UDP/IP에서 사용하던 함수로 같은 방법을 사용하여 프로세스들끼리 통신할 수 있어 매우 편리하며, 이점이 장점입니다. 말씀 드린 바와 같이 TCP/IP, UDP/IP와 같은 함수를 사용하고 다만 필요한 변수값만 바꾸어 주면 됩니다. 예를 들어 소켓을 생성해 보겠습니다. TCP/IP와 UDP/IP에서 처럼 socket() 함수를 이용합니다. 우선 #include 대신에 #include 를 사용합니다. 자, socket() 함수를 호출해 보겠습니다. int sock; sock = socket( PF_FILE, SO..

Public/tip & tech 2009.12.11

독학하는 아이들

학교생활을 하다보면 수업시간에 선생님이 뭐라 지껄이든 혼자 독학으로 공부하는 애들을 볼수가 있다. 그러면 선생님이 고개 쳐박고 뭐하냐고 혼내곤 한다. 이유는 간단하다. 듣고 이해하는 능력이 부족한것이다. 그런 애들은 선생님 말을 듣고 이해하는 능력이 부족하기 때문에 무슨말을 해도 못알아들으니 자기 혼자 이해할 수 있는 수단으로 독학을 선택한 것이다. 어른들이 선생님말 잘 들으라고 하는 이유와 선생님 말속에 시험문제 답이 있다고 하는 것은 듣고 이해하는 능력을 키우기 위함이다.

reentrant (재진입성) 함수와 쓰레드안전(MultiThread-safe)

* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.) 우선 책에 애매모호하게 짧게 나와서 이를 종종 질문해오시는 분들이 많아서 이렇게 긴글을 쓰게 되었습니다. 매번 설명하는것도 힘들고 해서 다음부터는 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다. 그럼 우선 논란이 된 "Advanced 리눅스 시스템 프로그래밍"책의 해당 내용을 적어보도록 하겠습니다. * 원자성과 쓰레드 - 안전, 재진입성에 대해서 원자성(atomicity)이 보장되는 코드(or ..

Public/tip & tech 2009.10.16

스마트폰 시대가 온다

스마트폰(SMART Phone)을 아직 정확하게 어떤 제품이라고 딱 잘라 말하기는 어렵다. 일반적으로 음성통신과 영상통신은 물론 PC와 연동하여 개인정보관리를 할 수 있고 무선 인터넷, 팩스 송수신 등 이전 PDA와 PDA폰에서 가능했던 기능을 가진 휴대폰을 통상 ‘스마트폰(Smart Phone)’이라 정의하고 있을 뿐이다. 이에 스마트폰(Smart Phone)에 대해 간략하게 알아보는 시간을 가졌다. ■ 스마트폰은 복합 멀티미디어 기기다?! 국내 스마트폰의 보유율은 1%도 미치지 못하고 있는 실정이지만 향후 구매 의향에 대한 설문에 40%가 넘는 사람들이 1년 이내에 구매의사가 있다고 응답했다. 결과만 놓고 본다면 향후 국내 스마트폰 시장이 급증할 것으로 보인다. 하지만 아직 스마트폰과 기능성 휴대폰(..