2009-07-02 6 views
5

멀티 코어 상자에서 실행되는 고성능, 고 가용성 서비스를 작성해야했습니다.멀티 코어 하드웨어에 대한 .NET Framework 지원

에 작업 Parellel 라이브러리를 사용하려면 실제로 멀티 코어 서버를 활용하거나 더 많은 하드웨어 (코어)를 추가하면 서비스가 자동으로 더 빨리 실행됩니까? .NET 프레임 워크가 저에게 마법을 제공합니까?

결과적으로 TPL을 사용하지 않는 .NET 응용 프로그램의 경우 더 많은 코어 (각 개별 코어의 사양을 동일하게 유지)로 서버를 업그레이드하면 성능이 향상됩니까?

제 생각에 (Joe Duffy의 책과 블로그를 보면) 멀티 코어를 프로그래밍해야합니다. 내 결론이 정확합니까?

답변

7

병렬 처리가 일반적인 문제가 아니기 때문에 이는 정확하게 대답하기가 어렵습니다. 병렬 처리를 활용할 수있는 장소를 찾으려면 프로젝트를 분석해야합니다.

응용 프로그램을 구체적인 독립적 인 작업으로 쉽게 분류 할 수 있다면 병렬 처리가 확실히 향상 될 것입니다. 본질적으로 직렬 인 경우 여러 코어/스레드가 전혀 도움이되지 않습니다.

병렬 작업이 프로세스의 핵심을 나타내는 것으로 판단한 경우 병렬 라이브러리를 사용하면 기본 작업을 수행 할 수있을뿐만 아니라 작업을보다 쉽게 ​​수행 할 수 있습니다.

+0

폴 감사합니다. 내 응용 프로그램에는 확실히 일정량의 병렬 처리가 있으며 응용 프로그램은 다중 스레드됩니다. 스레드를 생성하면 멀티 코어 하드웨어를 활용할 수 있습니까? 프레임 워크 (또는 OS?)가 다른 코어에서 스레드를 실행할 수 있는지 (또는해야하는지) 또는 명시 적으로 프로그램해야하는지 결정합니까? – Sprash

+1

스레드 만 사용하십시오. OS는 코어를 이용하여 처리합니다. ** 이것은 지나치게 단순화 된 응답입니다. 이와 같은 큰 프로젝트를 다루려면 "동시 프로그래밍"(http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie)을 읽어 보는 것이 좋습니다. = UTF8 & s = books & qid = 1246579844 & sr = 8-1 –

3

PLinq을보십시오. 닷넷 4.0. 작업 /로드 알고리즘을 관리 할 필요없이 많은 병렬 처리 기능을 제공합니다.

+0

예, 저는 PLinq와 .NET 4.0을 열망하고 있습니다. 그들은이 분야에서 꽤 광범위한 연구를 해왔습니다. 불행히도 생산을위한 프레임 워크의 알파 버전을 위험에 빠뜨릴 수는 없다. – Sprash

1

프로그램은 1 개 이상의 코어/프로세서를 활용하기 위해 몇 가지 실행 경로가 있어야합니다. 일반적으로 실행 경로 이상을 제공하는 대부분의 OS의 유일한 방법은 여러 프로세스 (실행 파일)를 실행하거나 하나의 프로세스 내에서 여러 스레드를 실행하므로 스레드가 두 개 이상 실행되는 것입니다.

본질적으로 멀티 스레딩을 다루는 것이보다 쉽게 ​​현대 언어에 구현 된 몇 가지 상위 수준 추상화가 있지만 기본 사항을 먼저 익히는 것이 더 좋습니다. Threads

+0

네, 내 응용 프로그램은 확실히 멀티 스레드 일 수 있습니다. 스레드를 만드는 행위만으로 멀티 코어 하드웨어를 활용할 수 있습니까? – Sprash

+0

실행하고자하는 코드를 분할하여 다중 스레드로 실행 한 다음 예 - OS가 다른 코어에서 스레드를 실행하도록 처리합니다. 물론, 멀티 스레딩은 매우 조심스럽게 끝내야합니다. 경주 정체, 교착 상태, 데이터 불일치 등으로 끝내고 싶지는 않습니다. – nos