C \ # 라인 - < CLR via C \ # (제4 판) >

  • 스 레 드 커 널 대상 (thread kernel object) OS 는 시스템 에서 만 든 모든 스 레 드 를 분배 하고 초기 화 합 니 다.데이터 구 조 는 스 레 드 에 대한 설명 속성 을 포함 합 니 다.데이터 구 조 는 이른바 스 레 드 상하 문 (thread context) 도 포함한다.컨 텍스트 는 CPU 레지스터 집합 을 포함 하 는 메모리 블록 입 니 다.x86, x64, ARM CPU 구조 에 대해 스 레 드 컨 텍스트 는 각각 약 700, 1240, 350 바이트 의 메모 리 를 사용 합 니 다.
  • 스 레 드 환경 블록 (thread environment block, TEB) TEB 는 사용자 모드 (응용 프로그램 코드 가 빠르게 접근 할 수 있 는 주소 공간) 에서 할당 되 고 초기 화 된 메모리 블록 입 니 다.TEB 는 메모리 페이지 (x86, x64, ARM CPU 는 4KB) 를 소모 합 니 다.TEB 는 스 레 드 의 이상 처리 체인 헤드 (head) 를 포함 합 니 다.스 레 드 가 들 어 오 는 모든 try 블록 은 체인 의 첫 번 째 노드 (node) 를 삽입 합 니 다.스 레 드 가 try 블록 을 종료 할 때 체인 에서 이 노드 를 삭제 합 니 다.이 밖 에 TEB 에는 스 레 드 의 '스 레 드 로 컬 저장' 데이터 와 GDI (Graphics Device Interface, 그래 픽 장치 인터페이스) 와 OpenGL 그래 픽 이 사용 하 는 데이터 구조 도 포함 되 어 있다.
  • 사용자 모드 스 택 (user - mode stack) 사용자 모드 스 택 은 전달 방법의 부분 변수 와 실 참 을 저장 합 니 다.현재 방법 이 되 돌아 올 때 스 레 드 가 어디에서 계속 실행 되 어야 하 는 지 를 알려 주 는 주소 도 포함 되 어 있다.Windows 는 기본적으로 모든 스 레 드 의 사용자 모드 에 1MB 메모 리 를 할당 합 니 다.더 구체 적 으로 윈도 는 1MB 주소 공간 만 유지 하고 스 레 드 가 실제 필요 할 때 물리 적 메모 리 를 제출 합 니 다.
  • 커 널 모드 스 택 (kernel - mode stack) 응용 프로그램 코드 박스 운영 체제 의 커 널 모드 함수 가 파 라 메 터 를 전달 할 때 커 널 모드 스 택 을 사용 합 니 다.안전 을 고려 하여 사용자 모드 의 코드 에서 커 널 에 전 달 된 모든 실제 인삼 에 대해 Windows 는 스 레 드 의 사용자 모드 스 택 에서 대책 을 내 놓 기 어 려 운 커 널 모드 스 택 으로 복사 합 니 다.복 제 를 거치 면 커 널 은 실제 인삼 의 값 을 검증 할 수 있다.응용 프로그램 코드 가 커 널 모드 스 택 에 접근 할 수 없 기 때문에 검 증 된 실제 인삼 값 을 변경 할 수 없습니다.OS 커 널 코드 가 복 사 된 값 을 처리 하기 시 작 했 습 니 다.그 밖 에 커 널 은 자신의 내부 방법 을 호출 하고 커 널 모드 스 택 을 이용 하여 자신의 실제 인삼, 저장 함수 의 부분 변 수 를 전달 하고 주 소 를 되 돌려 줍 니 다.32 위 윈도 에서 실행 되 며 커 널 모드 크기 는 12KB, 64 위 는 24KB 다.
  • DLL 스 레 드 연결 (attach) 과 스 레 드 분리 (detach) 가 Windows 에 알 리 는 정책 은 프로 세 스 에서 스 레 드 를 만 들 때 프로 세 스에 불 러 오 는 모든 위탁 관리 DLL 이 아 닌 DllMain 방법 을 호출 하고 이 방법 으로 DLL 을 전달 하 는 것 입 니 다.THREAD_ATTACH 로고.이와 유사 하 게 언제든지 스 레 드 가 종료 되면 프로 세 스 의 DLL 이 아 닌 모든 DllMain 방법 을 호출 하고 이 방법 에 DLL 을 전달 합 니 다.THREAD_DATACH 로고.어떤 DLL 은 이 알림 을 받 아야 프로 세 스 에서 생 성 / 삭 제 된 모든 스 레 드 에 특별한 초기 화 또는 (자원) 청소 작업 을 수행 할 수 있 습 니 다.예 를 들 어 C - Runtime 라 이브 러 리 DLL 은 일부 스 레 드 로 컬 저장 상 태 를 할당 합 니 다.스 레 드 는 C - Runtime 라 이브 러 리 에 포 함 된 함 수 를 사용 할 때 할인 상 태 를 사용 해 야 합 니 다.

  • 다음 함수 보기: DisableThreadLibrary Calls function
    Disables the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the specified dynamic-link library (DLL). This can reduce the size of the working set for some applications.
    Syntax
    C++
    BOOL DisableThreadLibraryCalls(
      HMODULE hLibModule
    );
    

    Parameters
    A handle to the DLL module for which the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications are to be disabled. The LoadLibrary, LoadLibraryEx, or GetModuleHandle function returns this handle. Note that you cannot call GetModuleHandle with NULL because this returns the base address of the executable image, not the DLL image.
    Return Value
    If the function succeeds, the return value is nonzero.
    If the function fails, the return value is zero. The DisableThreadLibraryCalls function fails if the DLL specified by hModule has active static thread local storage, or if hModule is an invalid module handle. To get extended error information, call GetLastError.
    Remarks
    The DisableThreadLibraryCalls function lets a DLL disable the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notification calls. This can be a useful optimization for multithreaded applications that have many DLLs, frequently create and delete threads, and whose DLLs do not need these thread-level notifications of attachment/detachment. A remote procedure call (RPC) server application is an example of such an application. In these sorts of applications, DLL initialization routines often remain in memory to service DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications. By disabling the notifications, the DLL initialization code is not paged in because a thread is created or deleted, thus reducing the size of the application’s working code set. To implement the optimization, modify a DLL’s DLL_PROCESS_ATTACH code to call DisableThreadLibraryCalls.
    Do not call this function from a DLL that is linked to the static C run-time library (CRT). The static CRT requires DLL_THREAD_ATTACH and DLL_THREAD_DETATCH notifications to function properly.
    Requirements
    Minimum supported client
    Windows XP [desktop apps
    Minimum supported server
    Windows Server 2003 [desktop apps
    Target Platform
    Windows
    Header
    libloaderapi.h (include Windows.h)
    Library
    Kernel32.lib
    DLL
    Kernel32.dll
    https://docs.microsoft.com/en-us/windows/desktop/api/libloaderapi/nf-libloaderapi-disablethreadlibrarycalls
    C \ # 와 다른 대부분의 위탁 관리 언어 에서 생 성 된 DLL 에는 DllMain 함수 가 없습니다. 따라서 위탁 관리 DLL 은 DLL THREAD ATTACH 와 DLL THREAD DETACH 알림 을 받 지 않 고 성능 을 향상 시 킵 니 다. 또한, 위탁 관리 DLL 이 아 닌 Win 32 DisableThreadLibrary Calls 함 수 를 호출 하여 이 알림 을 무시 하기 로 결 정 했 습 니 다.

    좋은 웹페이지 즐겨찾기