스레드 클래스에서 Thread.BeginThreadAffinity()
메서드를 사용하는 것은 무엇입니까? 사례보기를 사례 샘플에 제공하면 이해하는 것이 도움이 될 것입니다.Thread 클래스에서 Thread.BeginThreadAffinity() 메서드를 사용하는 것은 무엇입니까?
감사합니다.
스레드 클래스에서 Thread.BeginThreadAffinity()
메서드를 사용하는 것은 무엇입니까? 사례보기를 사례 샘플에 제공하면 이해하는 것이 도움이 될 것입니다.Thread 클래스에서 Thread.BeginThreadAffinity() 메서드를 사용하는 것은 무엇입니까?
감사합니다.
.NET 1.x에서 스레드는 항상 운영 체제 스레드와 일치했습니다. SQL Server 팀의 요청에 따라 .NET 2.0에 대한 해당 연결이 끊어졌습니다. CLR 호스트는 이제 스레드 매핑 자체를 제어 할 수 있습니다. IHostTaskManager은이를위한 작업 말 인터페이스입니다. 이 좋은 배경은 blog post입니다.
가끔은 코드가 특정 운영 체제 스레드에서 실행되는 것을 신경 써야하는 경우가 있습니다. Windows의 중요한 섹션과 돌연변이가 그 예입니다. 실제로 모든 종류의 관리되지 않는 코드 interop. Thread.BeginThreadAffinity()는 IHostTaskManager :: BeginThreadAffinity()를 호출하여 EndThreadAffinity()가 호출 될 때까지 작업이 다른 운영 체제 스레드에서 실행되지 않아야하며 현재 실행중인 스레드에 고정되어야한다는 것을 호스트에 알립니다.
하지만 이것에 대해 걱정하지 마십시오. SQL Server 프로젝트는 흉상이었고 신뢰할 수 없었습니다. 그들이 다시 시도 할 징조는 없습니다.
documentation의 비고 섹션을 읽었습니까? 그것은 꽤 잘 IMO를 설명합니다.
마이크로 소프트의 SQL 서버 2005과 공용 언어 런타임 의 일부 호스트는, 자신의 스레드 관리 기능을 제공합니다. 자체 스레드 관리를 제공하는 호스트는 실제 작업을 하나의 실제 운영 체제 스레드에서 다른 스레드로 으로 언제든지 이동할 수 있습니다. 대부분의 작업은이 전환에 의해 에 영향을받지 않습니다. 그러나 일부 작업 은 스레드 유사성을 가지고 있습니다. 즉, 은 실제 운영 체제 스레드의 ID에 의존합니다. 이러한 작업은 스위치가되어서는 안되는 코드를 실행할 때 호스트에 알려야합니다.
예를 들어, 응용 프로그램은 같은에서 Win32 CRITICAL_SECTION로 스레드 친화력이있는 운영 시스템 잠금을 획득 할 수 시스템이 API를 호출하는 경우, 당신 잠금을 획득 전에 BeginThreadAffinity를 호출 EndThreadAffinity 해제 후해야한다 자물쇠.
@binarycoder, 아니요. 바스 트는 광섬유에 sqlclr 코드를 실행하려고했습니다. –