스레드
스레드 (Threads)
--threads:on:option: 명령줄 스위치는 기본적으로 켜져 있어요. 그러면 typedthreads 모듈이 여러 스레딩 기본 요소(threading primitive)를 담고 있게 돼요. 자세한 내용은 spawn을 참고하세요.
스레드를 만드는 방법은 spawn과 createThread 두 가지뿐이에요.
Thread 프래그마 (Thread pragma)
새 실행 스레드로 실행되는 proc은 가독성을 위해 thread 프래그마로 표시해야 해요. 컴파일러는 no heap sharing 제약:idx: 위반 여부를 검사해요. 이 제약은 서로 다른 (스레드 지역) 힙에서 할당된 메모리로 구성된 데이터 구조를 만드는 것이 유효하지 않다는 뜻이에요.
스레드 proc은 createThread나 spawn에 전달할 수 있어요.
Threadvar 프래그마 (Threadvar pragma)
변수는 threadvar 프래그마로 표시하면 스레드 지역(thread-local):idx: 변수가 돼요. 여기에 더해 global 프래그마가 갖는 모든 효과도 함께 가지게 돼요.
var checkpoints* {.threadvar.}: seq[string]
구현상의 제약 때문에 스레드 지역 변수는 var 섹션 안에서 초기화할 수 없어요. (모든 스레드 지역 변수는 스레드 생성 시점에 각자 복제되어야 하기 때문이에요.)
스레드와 예외 (Threads and exceptions)
스레드와 예외가 만나는 방식은 단순해요. 한 스레드에서 처리된(handled) 예외는 다른 스레드에 아무 영향도 줄 수 없어요. 하지만 한 스레드에서 처리되지 않은(unhandled) 예외는 프로세스 전체를 종료시켜 버려요.