source

기존 스레드 풀 C 구현

manycodes 2023. 8. 19. 10:30
반응형

기존 스레드 풀 C 구현

pthreads 스레드 풀에 대해 C에서 어떤 오픈 소스 구현을 추천하시겠습니까?

이 구현이 다음과 같은 경우 추가 사항:

  • 경량: glib, APR, NSPR 및 기타 제품에는 큰 바이인이 포함되어 있습니다. 파일 2개(헤더 및 구현)만 있으면 좋겠습니다.
  • 여러 플랫폼(Linux, BSD, Mac OS X 등)에서 테스트되었습니다.
  • 여전히 유지됩니다.

저는 제가 사용할 수 있는 무언가를 만들기 위해 노력했고 그것을 github에 게시했습니다. 그것은 상상할 수 없을 정도로 스레드풀이라고 불립니다.

만약 여러분의 목표가 경량이라면, 여러분이 가장 원하지 않는 것은 사전에 작성된, 초범용, 높은 수준의 추상화 기반 구현입니다.특정 작업에 적합한 스레드 풀을 직접 구현하는 것은 매우 사소한 일이지만, 실제로 스레드 풀이 필요한지 또는 필요에 따라 스레드를 생성하고 제거하는 것만으로도 괜찮은지에 대해 의문을 제기할 수도 있습니다.

당신의 지원서에 대해 더 자세히 모르면, 저는 더 구체적인 조언을 해줄 수 없습니다.그러나 유용한 도구는 다음과 같습니다.

  • 조건 변수
  • 세마포어
  • 뮤텍스로 보호되는 작업 대기열
  • POSIX 메시지 대기열

다음은 다음과 같은 기능을 갖춘 구현입니다.

  • ANSIC 및 POSIX 호환
  • 작지만 강력한 API
  • 사용자로부터의 동기화
  • 전체 문서

저는 이것을 사용한 적이 있는데, 이것은 실제로 공식적인 구현 그 자체가 아닙니다.요청한 대로 pthread를 사용하므로 수행해야 할 작업에 대한 몇 가지 아이디어를 제공합니다. (참조)threadpool.h,threadpool.c,threadpool_test.c그리고Makefile컴파일 방법에 대한 지침을 참조하십시오.)원래 의도가 당신과 다를 수 있기 때문에 분명히 리팩터링을 해야 할 것입니다.사실 댓글이 꽤 잘 달렸어요.

비록 이것이 원래의 질문에서 벗어났지만, 저는 최신 C 표준인 비공식적인 C1X(위키백과, 하이퍼링크 제한 참조)가 N1570 스레드에 대한 지원을 계획했다는 것도 언급하고 싶습니다(구글하기, 하이퍼링크 제한 다시!)(7.31.15).

경험상 개인적인 조언은 응용프로그램이 실제로 병렬로 실행될 수 있는지, 그리고 새로운 스레드를 만드는 데 드는 오버헤드가 너무 커서 스레드 풀 없이는 살 수 없는지 확인하는 것입니다.개인적으로 저는 이 두 부분 모두에서 실수를 저질렀고, 결국 단일 스레드 애플리케이션보다 구현 속도가 느렸습니다.또한 실제로 애플리케이션의 성능을 저하시킬 수 있는 캐시 잠금 및 누락을 비롯한 다양한 문제에 대해 알고 있어야 할 수도 있습니다.

아마 지금쯤은 계속 지껄이고 있겠지만, 행운을 빌어요.

언급URL : https://stackoverflow.com/questions/6297428/existing-threadpool-c-implementation

반응형