그래서 코드를 실행하고 성능을 향상시키고 싶습니다. 삭제를 완료하는 데 꽤 오랜 시간이 걸리고 (약 0.003 초) 다른 스레드에 넣고 배열을 삭제하기로 결정했습니다.다음 코드에서 dispatch_async 성능에 영향을 줍니까?
이제 스레드를 생성하고 실행하는 데 걸리는 시간이 배열을 삭제하는 것보다 훨씬 빠릅니다.하지만 이제는 스레드를 만든 다음 코드가 성능에 영향을 미치므로 실행하는 데 2 ~ 3 배 정도 더 오래 걸립니다.
왜 이런 일이 벌어지고 있으며 성능이 어떻게 향상 될 수 있는지 알고 있습니까? 내가 전에는 오직 Mac에서 코딩을했기 때문에 dispatch_async를 사용하고 있습니다. 다른 스레드를 만드는 C/C++ 라이브러리를 시도하지 않았으므로, 성능이 좋은 동일한 작업을 수행 할 수있는 대체 라이브러리를 알고 있다면, 그것을 사용하는 것으로 넘어 갈 것입니다.
clock_t start, end, start2, end2;
start = clock();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
std::set<int> *temp = a;
a = nullptr;
dispatch_async(queue, ^{
delete[] temp;
});
//delete[] a;
end = clock();
a = new std::set<int>[10000];
start2 = clock();
/*
Code here initializes stuff inside the array a
Code here never changes
*/
end2 = clock();
//(end2 - start2/CLOCKS_PER_SEC) is now much longer than it was without multithreading but (end - start)/CLOCKS_PER_SEC is much faster (which is expected)
그래서 임시 변수 ('temp')를'a'와 같은 포인터로 설정 한 다음'a'를 널 포인터로 설정하여 배열의 삭제와 생성을 동시에 할 수 있습니다. 그것? – TheAmateurProgrammer
변수가 무엇을 가리키고 있든 상관 없습니다. 이것은 메모리를 할당하고 해제하고 힙의 상태를 추적하는 데 필요한 정리 작업을 수행하는 시스템 내에서의 경쟁입니다. 그 누구도 당신의 변인에 대해 알고 있거나 신경 쓰지 않습니다. –
나는 .. 코드의 성능을 향상시킬 수있는 방법이있을 것인가, 아니면 지금 당장 가지고있는 것을 고수 할 것인가? – TheAmateurProgrammer