2012-11-18 5 views
1

나는 하나의 하드 디스크에서 데이터를 읽거나 쓸 수 있도록 TCP 소켓을 연결하는 수천 개의 클라이언트로부터 요청을받는 서버를 가지고있다.파일 읽기/쓰기를 java의 하드 드라이브에 대기시키는 방법은 무엇입니까?

나는 모든 HD 파일을 수행하는 스레드를 어떻게 든 필요로한다는 것을 알고있다.이 경우에는 IO가되지만 소켓 연결 스레드의 모든 요청을 하나의 마스터 하드 드라이브 관리자에게 전달하여 어떤 순서로이 작업을 수행 할 수있다. 연결된 소켓 스레드로 데이터를 돌리시겠습니까?

이러한 방식으로 작업을 대기열로 보내는 방법이 있습니까?

+1

왜 HD 스레드가 필요하다고 생각하십니까? 그들은 모두 읽기/다른 파일을 작성하는 경우 연결 스레드에서 인라인 만 수행하십시오. 당신은 여기에 자신 만의 막대를 만들고 있습니다. – EJP

+0

기계식 하드 드라이브는 한 번에 한 위치에서만 읽거나 쓸 수 있었기 때문에 들어오는 클라이언트 요청에서 20,000 개의 스레드를 생성하여 다른 파일을 동시에 만들거나 보았을 때 효과가 없었습니다. 아마도 나는 크게 착각하고 있습니까? – iForgotMyLogin

+0

작동합니다. 실제로 큐가 있습니다. 다른 것을 추가 할 필요가 없습니다. – EJP

답변

-1

나는 여기서 말한 것에 동의하지 않는다. 데이터를 소비하고 hdd에 쓰는 관리자와 다른 계층으로가는 것은 자연스럽고 자연스러운 작업을 위해 연결 스레드를 풀어주는 역할을한다. 디스크에 쓰는 것을 멈추거나 분산 된 다른 소스에 쓰기와 같은 원하는 명령을 줄 수 있습니다. 모든 접근법을 선택할 수있는 일만하고 싶다면 디스크에 쓸 때마다 커널 명령을 사용하십시오. 이 시스템 콜은 실제 요청에 도달 할 때까지 기존 데이터 블록을 검사하기 위해 캐시를 거쳐 시스템에있는 다른 모든 요청과 함께 대기하고 다른 일부 디스크 스레드는 요청을 가져와 연결 스레드를 의미합니다 응답을 기다리는 경우 그 쓰레드가 어떤 일을 할 수 있었을 때 사용할 수 없다. .

+0

이것은 답변이 아닙니다. – immibis