|
김나솔 님이 쓰신 글 :
: 안녕하세요. c++ builder로 네트워크 프로그래밍을 공부하는데요,
:
: 여러 개의 다른 클라이언트에서 파일 다운을 요청해오면,
:
: TServerSocket의 OnGetThread 이벤트 핸들러에서 TServerClientThread에서
:
: 상속받은 쓰레드를 생성해서, 파일을 보내주려고 하거든요.
:
: 근데, 제가 쓰레드에 대해서 이해를 잘 못하는 것도 있지만,
:
: 아무튼, 쓰레드의 ClientExecute() 함수를 오버라이드해서, 파일을 읽어들여서
:
: 보내주는 코드를 써줬는데, cpu usage가 100%가 되면서 컴이 먹통이 되더라고요..
:
: 정확히 쓰레드가 어떤식으로 병렬로 수행이 되는 지도 잘 모르겠구요.
:
: 여기저기서 쓰레드에 대한 설명을 읽었는데, 실제로, ClientExecute()에서,
:
: 파일 보내는 걸 어떻게 코드를 써야할 지 잘 모르겠는데, 좀 가르쳐 주세요.
:
: 그리고 쓰레드가 구체적으로 어케 수행되는 지도 좀 가르쳐주세요.
:
: 제가 지금 이해하고 있는 건, 쓰레드가 생성되면, Suspended가 아닌 경우에는
:
: 바로 ClientExecute함수가 수행된다는 건데, 그 이후로, 이를테면 파일 큰 거 하나를
:
: 보낼 때, 계속 읽어들이고, 계속 보낼텐데 언제 어떻게 다른 작업으로 시간을 넘겨주는지(?)
:
: 를 모르겠어요. 에궁,, 질문이 너무 난잡해서 죄송해요. 그럼 이만.
안녕하십니까?
한꼬맹이 입니다.
쓰레드라는 것은 '제어의 흐름'이라고 할수 있죠
우리가 프로세스를 하나 생성시키면 메인쓰레드가 디폴트로 하나 생깁니다.
프로세스가 어떤작업을 수행할수 있는 것도 이 쓰레드 때문이라고 생각하시면 됩니다.
이 쓰레드를 두개이상 생성시키면 여러가지 작업을 할수 있으므로 이런 것을 보통
멀티 태스킹이라고 하지요...
블럭킹에서의 서버소켓에서 TServerCilentThread라는 것으로 쓰레드클래스로 클라이언트들을
관리합니다. ClientExecute()상에서 테이터를 읽고 쓰시려면 반드시 자기 자신이 반대편의
연결이 데이터를 읽고, 쓸 준비가 되었는지 파악해야 하고 적절한 시간 간격등을 조율하셔야
합니다. 이러한 기능은 소켓스트림수준에서 이용하시면 됩니다.
|