httpwebrequest
을 사용하여 웹 서버에 액세스하고 주어진 페이지 범위에서 수천 개의 레코드를 가져 오려고합니다. 웹 페이지에 대한 각각의 히트는 15 개의 레코드를 가져 오며, 웹 서버에는 거의 8 ~ 10000 페이지가 있습니다. 즉, 서버에 총 120000 회의 조회가 발생했습니다! 단일 프로세스로 간단하게 수행하면 작업에 많은 시간이 소요될 수 있습니다. 따라서 다중 스레딩은 즉시 해결할 수있는 솔루션입니다.여러 스레드를 사용하여 웹 서버에서 효율적으로 검색
현재 검색 목적을 위해 작업자 클래스를 만들었습니다. 작업자 클래스는 지정된 범위에서 검색하기 위해 5 개의 하위 작업자 (스레드)를 생성합니다. 하지만, 초보자가 스레딩을 할 수있는 능력으로 인해, 나는 그것을 작동시키지 못합니다. 왜냐하면 나는 동기화가 잘되지 않아서 모든 일이 함께 이루어지기 때문입니다.
public void Start()
{
this.totalRangePerThread = ((this.endRange - this.startRange)/this.subWorkerThreads.Length);
for (int i = 0; i < this.subWorkerThreads.Length; ++i)
{
//theThreads[counter] = new Thread(new ThreadStart(MethodName));
this.subWorkerThreads[i] = new Thread(() => searchItem(this.startRange, this.totalRangePerThread));
//this.subWorkerThreads[i].Start();
this.startRange = this.startRange + this.totalRangePerThread;
}
for (int threadIndex = 0; threadIndex < this.subWorkerThreads.Length; ++threadIndex)
this.subWorkerThreads[threadIndex].Start();
}
searchItem 방법 :
public void searchItem(int start, int pagesToSearchPerThread)
{
for (int count = 0; count < pagesToSearchPerThread; ++count)
{
//searching routine here
}
}
내가 .NET에서 대의원, 행동, 사건에 대해 알고 있지만 confusing..This을 받고있다 스레드로 작업을하고 내가 사용하고있는 코드입니다 스레드의 공유 변수 사이에 문제가 있습니다. 스레드 세이프 프로 시저로 만드는 방법을 안내해 줄 수 있습니까?
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –
@JohnSaunders는 다음 번에 조심할 것입니다. 감사합니다. – faizanjehangir
@faizanjehangir - FTS 기능을 제공하는 데이터베이스를 사용 해본 적이 있습니까? 이것은 수동으로 수행하는 경우 DDOS에 실제로 영향을받습니다. – tjameson