이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14970|회답: 3

[출처] [실제 전투]. NET/C#은 SemaphoreSlim을 사용하여 동시 실행 방식을 제한합니다

[링크 복사]
게시됨 2022. 2. 19. 오후 9:23:20 | | | |
요구사항: 하드웨어 자원이 제한되어 있기 때문에, 프로그램은 일정량의 하드웨어 자원을 소비해야 하며, 동시성이 높은 경우에는 프로그램 자원을 과도하게 소비하는 일부 메서드가 제한되지 않는다면(대량의 데이터를 엑셀 테이블로 내보내는 경우), 전체 프로그램이 정상적인 서비스를 제공하지 못하고 운영체제의 정상 작동에도 영향을 줄 수 있습니다.

세마포어와 세마포어슬림 차이점

SemaphoreSlim과 Semaphore는 기능적으로 유사합니다. SemaphoreSlim은 Semaphore보다 약 4배 빠르지만, 프로세스 간 신호 전달에는 사용할 수 없습니다.

성능 향상의 이유는 SemaphoreSlim 클래스가 Windows 커널 세마포어를 사용하지 않는 Semaphore 클래스에 대한 경량 대안을 제공하기 때문입니다. 본질적으로, 세마포어에 이름을 붙일 필요가 없다면 SemaphoreSlim 클래스를 사용하세요.

SemaphoreSlim은 SpinWait와 Monitor를 기반으로 하므로, 잠금을 받기 위해 대기하는 스레드는 잠금을 획득하기 전에 CPU 사이클을 소모합니다. 만약 이 방법이 일어나지 않으면, 스레드는 시스템이 컨텍스트를 전환하고 운영체제가 해당 스레드를 다시 스케줄링할 때(CPU 사이클을 소모함으로써) 다시 시도할 수 있게 합니다. 대기 시간이 길면 이 모드는 많은 CPU 사이클을 소모할 수 있습니다. 그래서 이 구현의 최선의 경우는 대부분 대기 시간이 없고 거의 즉시 잠금을 얻을 수 있다는 것입니다.
세마포어는 OS 커널 내 구현에 의존하기 때문에, 락을 획득할 때마다 상당한 CPU 사이클이 필요하고, 그 이후에는 스레드가 잠금을 얻는 데 걸리는 시간을 얻기 위해 절전 모드로 전환됩니다.

세마포어 문서화:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlim 문서:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

메서드를 실행하기 전에 일반적으로 사용되는 대기 방법은 다음과 같습니다자신의 사업 상황에 따라 전화하세요

Wait(): 스레드가 SemaphoreSlim에 진입할 때까지 차단합니다.
wait(0): 메서드가 차단되지 않습니다. 대기 중인 핸들 상태를 테스트하고 즉시 반환합니다.
대기: 현재 스레드가 SemaphoreSlim에 진입할 때까지 차단하며, 32비트 서명 된 정수를 사용해 타임아웃을 지정합니다.

소스 코드는 다음과 같습니다:

렌더링은 다음과 같습니다:







이전의:리눅스 비밀 로그인(ssh) 또는 비밀 복사(scp) 파일을 다른 서버로 보내는 방법
다음:리눅스는 look busy를 사용해 CPU 사용량을 시뮬레이션합니다
게시됨 2022. 2. 19. 오후 11:16:57 |
배우기 시작해...
게시됨 2022. 2. 20. 오후 10:19:24 |
테스트
 집주인| 게시됨 2024. 12. 18. 오후 8:40:10 |
C# 스레드가 학습하는 ManualResetEvent와 AutoResetEvent의 차이점
https://www.itsvse.com/thread-4810-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com