User Tools

Site Tools


lecture:core.async:설명

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lecture:core.async:설명 [2013/12/15 12:00]
psk810 [채널]
lecture:core.async:설명 [2019/02/04 14:26] (current)
Line 1: Line 1:
 ====== 설명 ====== ====== 설명 ======
  
 +비동기적인 로직은 동기적으로 보이는 코드로 작성하도록 한다.
 ===== 채널 ===== ===== 채널 =====
  
Line 27: Line 28:
  
 <code clojure> <code clojure>
-(chan)+(chan) ​  ; Unbuffered channel.
 </​code>​ </​code>​
 +
 +송신자가 channel에 값을 쓰면, 수신자가 그 값을 읽을 때까지 대기. 수신자는 송신자가 값을 쓸 때까지 대기.
  
 ** 고정 크기 버퍼의 채널 생성 ** ** 고정 크기 버퍼의 채널 생성 **
  
 <code clojure> <code clojure>
-(chan 10)+(chan 10) ; Channel with 10 slots. FIFO.
 </​code>​ </​code>​
  
 +버퍼가 비어있으면 수신자 대기, 버퍼가 꽉차면 송신자 대기.
  
 ** dropping 버퍼 채널 생성 ** ** dropping 버퍼 채널 생성 **
Line 41: Line 45:
 버퍼가 꽉차면 최신값을 버린다. 버퍼가 꽉차면 최신값을 버린다.
  
 +<code clojure>
 (chan (dropping-buffer 10)) (chan (dropping-buffer 10))
 +</​code>​
  
 ** sliding 버퍼 채널 생성 ** ** sliding 버퍼 채널 생성 **
Line 47: Line 53:
 버퍼가 꽉차면 가장 오래된 값을 버린다. 버퍼가 꽉차면 가장 오래된 값을 버린다.
  
 +<code clojure>
 (chan (sliding-buffer 10)) (chan (sliding-buffer 10))
 +</​code>​
  
 ==== 채널 닫기 ==== ==== 채널 닫기 ====
Line 73: Line 80:
 <code clojure> <code clojure>
 (let [c (chan 10)] (let [c (chan 10)]
-  (>!! c "​hello"​)+  (>!! c "​hello"​)  ;; => 대기(blocking)
   (assert (= "​hello"​ (<!! c)))   (assert (= "​hello"​ (<!! c)))
   (close! c))   (close! c))
Line 93: Line 100:
  
   * go 매크로는 바디를 특수 스레드 풀에서 실행한다.   * go 매크로는 바디를 특수 스레드 풀에서 실행한다.
 +    * go 블럭은 경량(lightweight) 스레드.
 +    * 경량 스레드는 일반 스레드와 1:1 매칭이 아니다.
 +    * clojure의 경우 시스템 core + 2의 스레드 풀 사용.
 +    * clojurescript의 경우 이벤트 루프 사용. ​
   * 채널 대기 연산들은 다른 스레드는 방해하지 않고, 자신의 실행은 중단하게 된다.   * 채널 대기 연산들은 다른 스레드는 방해하지 않고, 자신의 실행은 중단하게 된다.
   * 이러한 메카니즘은 이벤트/​콜백 시스템에는 외재적인 제어의 역전을 캡슐화한다.   * 이러한 메카니즘은 이벤트/​콜백 시스템에는 외재적인 제어의 역전을 캡슐화한다.
lecture/core.async/설명.1387108800.txt.gz · Last modified: 2019/02/04 14:26 (external edit)