http 웹서버 관련 ,, 멀티쓰레딩
글쓴이: 12monkeyz / 작성시간: 월, 2007/01/08 - 7:03오후
이런저런 이유로 단순하게 속도를 비교하기위해서
멀티쓰레드 방식으로 구현된 웹서버와 쓰레드풀로 구현된 웹서버를 만들었습니다
자바가 아닌 C를 사용하였구 요청은 단순하게 test.jpg를 받아오는 것으로 테스트했습니다
httperf를 사용해서 비교중인데 초당 request를 올리면 서버가 자꾸 멈춰버립니다
즉
Total: connections 100 requests 100 replies 94 test-duration 20.298 s
이런식으로 커넥션 개수와 requests 는 제대로인데 reply가 완료되지 못하고 멈춰버립니다
코드를 첨부할테니 문제점을 지적해주셨으면 감사하겠습니다
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 7.28 KB |
![]() | 900바이트 |
Forums:
혹시 파이프 문제면
혹시 파이프 문제면
signal(SIGPIPE, SIG_IGN);
를 한번 추가해 보세요.
파이프는 사용이 되지 않고..
보니까 쓰레드가 생성되기는 다 되는데
생성이끝남과 동시에 전송도 멈춰버립니다
즉 1개 생성되고 1개 전송되는건 잘되는데
생성에 비해 jpg file이 전송되는 속도는 느리다보니까
점점 생성속도에 차이가 생기고
나중에는 쓰레드가 예를들어 100개 생성되었을때 95번째 전송중이라면
95개까지만 마치고 더이상 전송을 하지 않습니다
뮤텍스가 들어갈 부분은 없는듯 한데 제 수준에서는 도대체 문제가 무엇인지
파악을 하지 못하겠습니다--
우선 일단 눈에
우선 일단 눈에 보이는건 thread_data 변수의 사용입니다. 이건 메인에서 alloc 한다음 스레드에 넘기고 스레드에서 free하게 하세요.
main에서 하나를 여러개의 스레드가 같이 보는 순간이 생길 수 있습니다.
request_response() 함수에서 read 한 길이만큼 write 해야 하는데 무조건 BUFSIZ만큼 write을 하는군요.
약간은 무례한 조언일 수 있는데 buf 인자를 호출받은 함수에서 다른 용도로 재 사용하는건 좋은 습관이 아닙니다. 물론 출력인자로
사용할 경우는 예외이지만요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기