User Tools

Site Tools


lecture:core.async:rationale_by_rich_hickey

Differences

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

Link to this comparison view

Next revision
Previous revision
lecture:core.async:rationale_by_rich_hickey [2013/12/15 06:31]
psk810 새로 만듦
lecture:core.async:rationale_by_rich_hickey [2019/02/04 14:26] (current)
Line 53: Line 53:
 === go block과 IOC 스레드 === === go block과 IOC 스레드 ===
  
-go는 body를 취하고, 채널 연산에 대해 body를 수행하는 매크로이다. go는 body를 상태머신으로 바꾼다. 블로킹 연산이 하면, 상태머신은 '​주차'​되고,​ 실제 스레드는 ​릴리즈된다. 이러한 방식은 C# async와 비슷하다. 블로킹 연산이 완료되면,​ 코드는 ​재장전된다(스레드 풀 스레드에서,​ 혹은 JS VM의 유일한 스레드에서) +go는 body를 취하고, 채널 연산을 위해 body를 수행하는 매크로이다. go는 body를 상태머신으로 바꾼다. 블로킹 연산에 하면(역자주:​채널에서의 입력대기), 상태머신은 '​주차'​되고, ​제어를 하는 ​실제 스레드는 ​해제될 것이다. 이러한 방식은 C# async와 비슷하다. 블로킹 연산이 완료되면(역자주: 채널에서 입력이 들어오면), 코드는 ​다시 수행된다(스레드 풀 스레드에서,​ 혹은 JS VM의 유일한 스레드에서) 
-이런 식으로 프로그램을 이벤트/​콜백 시스템으로 ​빠지게 했던 ​빠지게 했던 IOC가 ​ 그런 메카니즘을 통해 캡슐화되고,​ 당신에게는 간단한 순차 코드만 남는다. 이것은 스레드환상을 주는데, 더 중요하게는 분리가능한 순차 시스템을 ClojureScript에 제공한다.+이런 식으로 프로그램을 이벤트/​콜백 시스템으로 빠지게 했던 IOC가 그런 메카니즘을 통해 캡슐화되고,​ 당신에게는 간단한 순차 코드만 남는다. 이것은 스레드환상을 주는데, 더 중요하게는 분리가능한 순차 시스템을 ClojureScript에 제공한다.
  
 go 블러에서의 1차 연산은 >! ('​put'​)과 <! ('​take'​)이다. go 블럭 자체는 즉각 채널을 리턴한다. 이 채널에 결과적으로 바디의 마지막 표현식의 값이 들어가고,​ 채널을 닫힌다. go 블러에서의 1차 연산은 >! ('​put'​)과 <! ('​take'​)이다. go 블럭 자체는 즉각 채널을 리턴한다. 이 채널에 결과적으로 바디의 마지막 표현식의 값이 들어가고,​ 채널을 닫힌다.
lecture/core.async/rationale_by_rich_hickey.1387089084.txt.gz · Last modified: 2019/02/04 14:26 (external edit)