2011-03-14 5 views
3

내 응용 프로그램은 4 개의 동시 스레드에서 실행됩니다. 나는이 스레드를 다중 스레드뿐만 아니라 단일 스레드 (MTA/STA)로 만들 수 있습니다. 내가 그들에게 STA를 선언 할 때 결과는 내가 MTA를 선언 할 때보 다 빠릅니다. 자사의 vb.net로 작성된 및 운영 체제로 2003 서버 (Windows) 표준 버전을 사용하고, 프로세서는 단일 및 쿼드 코어입니다.멀티 프로세서와 멀티 코어의 차이점

빨리 처리하려면 어떻게해야합니까?

나는 프로세서 수를 2로 늘릴 수 있으며 대신에 16 진수/8 진수 코어 프로세서를 사용할 수 있습니다. 누구든지 제안 할 수 있습니까?

감사합니다.

+0

FYI : MTA/STA는 COM 스레딩 아파트입니다. http://msdn.microsoft.com/en-us/library/ms693344(v=vs.85).aspx –

답변

2

다중 프로세서는 마더 보드에 다중 프로세서 칩이 있음을 의미합니다. 멀티 코어는 칩에 다중 처리 장치가 있음을 의미합니다. 다중 프로세서는 서로 다른 전면 버스를 가지며 다중 코어는 일반적으로 L2 캐시를 공유합니다. 이 두 가지 모두 당신이하고있는 것에 따라 장점이 있습니다.

질문의 두 번째 부분에 대한 대답은 덜 구체적입니다. 수행중인 작업이 그렇게 복잡하지 않으면 여러 스레드의 오버 헤드가 성능 향상보다 중요 할 수 있습니다. 또한 스레드가 동일한 공유 메모리에 액세스하려고하면 잠금으로 인해 공유 메모리가 느려집니다. 스레드는 디스크에 입출력을 수행하는 병목 일 수도 있습니다. 실제로 무엇을하고 있는지에 대한 정보가 없으면 자신의 문제와 앞으로 나아갈 방법을 말하는 것이 어렵습니다. 더 새롭고 더 빠르고 더 큰 프로세서를 구입하면 속도가 빨라지 겠지만 프로그램이 더 빨리 실행되지 않는다고 생각하는 이유는 다루지 않습니다. 문제가 발생하기 전에 코드 작업에 시간을 할애하십시오.

+0

"문제가 발생하기 전에 코드 작업에 시간을 할애하십시오."를 참조하십시오. 동의하는 동안, 나는 code_ **로 일하는 시간 낭비가 또한 ** 문제에서 돈을 버리는 것에 주목해야한다고 생각한다. 때로는 매우 뒤쪽으로 - 더 크고 우수한 기계가 더 빠르고 저렴한 솔루션입니다. –

+0

@BinaryWorrier : True. 신속하고 신속하게 작동하는 솔루션과 시간이 걸릴 수있는 솔루션, 오류를 유발할 수있는 솔루션과 속도 저하의 근본 원인을 해결할 수있는 솔루션 간의 균형을 유지합니다. – unholysampler

0

MTA는 이름에서 알 수 있듯이 개의 스레드가 여러 아파트에서 실행될 수 있으므로 잠금 기능이 있어야하므로 MTA는 STA보다 느려야합니다. 하나의 스레드 만 실행 중이더라도 잠금을 수행해야하므로 오버 헤드가 발생합니다. 따라서 4x STA에서 실행중인 4 개의 스레드는 스레드와 아파트가 일대일로 일치하더라도 4x MTA에서 실행되는 4 개의 스레드보다 빠릅니다. 개체에 하나 이상의 스레드를 실행하지 않으려는 경우 아파트 모드 MTA를 만들어서 아무 것도 얻지 못합니다.

네 개의 스레드가 다른 코어에서 실행될 가능성이 높을수록 프로세서 및/또는 코어를 추가하면 도움이됩니다.

그러나 스레드 수보다 많은 코어를 추가하면 이 아닌은 하나의 코어에서만 하나의 스레드 만 실행하므로 성능이 향상됩니다. 귀하의 예에서 4 개의 스레드는 4 개의 코어 (동일한 프로세서에 속해 있는지 여부)에서 실행되어야합니다. 시스템 프로그램을위한 하나 또는 두 개의 코어 (드라이버가 없다고 가정)와 드라이버를 추가하십시오. 스레드 수가 증가하지 않으면 해당 코어가 유휴 상태 일 수 있으므로 더 많은 코어를 추가하면 도움이되지 않습니다.

다른 것들도 동시성 성능에 영향을 미칩니다. 공유 리소스가 스레드 중 경합 포인트이고 스레드가이 리소스의 잠금을 항상 기다리고 있다면 코어를 추가하면 도움이되지 않을 수도 있습니다 병목 현상이 공유 리소스에 액세스하고 스레드가 유휴 대기 상태로 실행되기 때문입니다. 이 경우 클록 속도면에서 더 빠른 CPU로 업그레이드하는 것이 만족 한 리소스가 출시되는 속도를 높이기 때문에 더 빠릅니다.

다른 프로세서가 하나의 프로세서에서 내부 리소스를 공유하고 하나의 코어가 리소스를 사용하는 경우 다른 코어가 차단되므로 동일한 프로세서에 코어를 추가하는 것보다 일반적으로 프로세서를 추가하는 것이 빠릅니다.그러나 여러 프로세서가 동일한 메모리 위치에 액세스해야하고 동일한 정보를 한 프로세서의 캐시에 저장하고 모든 코어에서 공유 할 수있는 코어 추가가 더 빠르다고 들었습니다.

관련 문제