2012-11-18 3 views

답변

7

요즘 Tcl에서 멀티 스레딩을 수행하는 일반적인 방법은 Tcl의 핵심과 함께 개발되는 Thread extension —을 사용하는 것이지만 설치할 필요가있는 특정 플랫폼 (예 : 다양한 Linux 기반 OS)에서 사용하는 것입니다. 이 확장 프로그램을 사용할 수있는 별도의 패키지

The threading modelThread 확장 구현은 "인터프리터 당 하나의 스레드"입니다. 즉, 각 스레드는 하나의 Tcl 인터프리터 (및 자식 인터프리터를 무제한으로) "호스트"할 수 있지만 다른 스레드에서 실행되는 코드는 다른 스레드에서 호스트되는 인터프리터에 액세스 할 수 없습니다. 이것은 Tcl의 쓰레드로 작업 할 때 다중 인터프리터라는 개념을 마스터해야한다는 것을 의미합니다.

다른 스레드에서 실행 통역간에 데이터를 교환하는 고전적인 접근 방식은 메시지 전달이다 당신은 다른 스레드에서 실행되는 대상 인터프리터의 입력 큐-스크립트를 게시 한 후 응답을 기다립니다. 반면에 스레드 공유 변수 (잠금에 의한 공유 메모리 구현)도 사용할 수 있습니다. 또 다른 유용한 기능은 스레드 풀을 지원하는 것입니다.

"Tcl and threads" 위키 페이지 Thread's extension manual pages을 읽으십시오.

코드 예제는 위키에 있습니다. 여기에 단지 one of them입니다.

당신이 생각하는 당신의 절차, parrallel에서 실행해야하는 경우, 는 I/O 바운드 (즉, 그들은 네트워크에서 뭔가를 읽고/또는 뭔가를 보낼 수있다)하지 대부분 유의하시기 바랍니다 CPU- 바운드 (많은 계산 수행)을 사용하면 이벤트 기반 처리 방식을 사용하면 더 나은 결과를 얻을 수 있습니다. Tcl에는 이벤트 루프가 기본적으로 지원되며 다음 청크가 발생하면 Tcl이 코드를 실행할 수 있습니다 데이터를 채널 (예 : 네트워크 소켓)에서 읽거나 채널에 쓸 수 있습니다.

+2

스레드 확장 8.6이 함께 제공됩니다. –

+0

와우, 그런 고풍스러운 언어와 멀티 스레드 통역이 있습니다! :-) 그것으로, 그것은 PHP, perl5, 루비와 파이썬을 압도한다. :-) – peterh

+0

@peterh, curly-bracey는 언어를 불과 10 년 더 간결하게 보여줍니다. BCPL은 1966 년부터 시작되었고 LISP (Tcl은 본질적으로 구문과 중첩 된 중괄호가 없기 때문에 유사합니다)는 1958 년입니다 ([this] 자세한 내용은 https://softwareengineering.stackexchange.com/a/188463). 하지만 우리는 ........ – kostix

관련 문제