<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### Agents Agents 是用把一些事情放到另外一個線程來做 -- 一般來說不需要事務控制的。它們對于修改一個單個對象的值(也就是Agent的值)來說很方便。這個值是通過在另外的一個thread上面運行一個“action”來修改的。一個action是一個函數, 這個函數接受Agent的當前值以及一些其它參數。 Only one action at a time will be run on a given Agent在任意一個時間點一個Agent實例上面只能運行一個action. `agent` 函數可以建立一個新的Agent. 比如: ``` (def my-agent (agent <em>initial-value</em>)) ``` `send` 函數把一個 action 分配給一個 Agent, 并且馬上返回而不做任何等待。 這個action會在另外一個線程(一般是由一個線程池提供的)上面單獨運行。 當這個action運行結束之后,返回值會被設置給這個Agent。 `send-off` 函數也類似只是線程來自另外一個線程吃。 `send` 使用一個 "固定大小的" 線程吃 (java.util.concurrent.Executors里面的 [newFixedThreadPool](http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)) ) , 線程的個數是機器的處理器的個數加2。如果所有的線程都被占用,那么你如果要運行新的action, 那你就要等了。 `send-off` 使用的是 "cached thread pool" (java.util.concurrent.Executors里面的? [newCachedThreadPool](http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html#newCachedThreadPool()) ) , 這個線程池里面的線程的個數是按照需要來分配的。 如果 `send` 或者 `send-off` 函數是在一個事務里面被調用的。 那么這個action直到線程提交的時候才會被發送給另外一個線程去執行。這在某種程度上來說和 `commute` 函數對 Ref 的作用是類似的。 在action里面, 相關聯的那個agent可以通過symbol: `*agent*` 得到。 `await` 以一個或者多個Agent作為參數, 并且block住當前的線程,直到當前線程分派給這些Agent的action都執行完了。 `await-for` 函數是類似的, 但是它接受一個超時時間作為它的第一個參數, 如果在超時之前事情都做完了, 那么返回一個非nil的值, 否則返回一個非nil的值,而且當前線程也就不再被block了。 `await` 和 `await-for` 函數不能在事務里面調用。 如果一個action執行的時候拋出一個異常了,那么你要dereference這個Agent的話也會拋出異常的。在action里面拋出的所有的異常可以通過 `agent-errors` 函數獲取。 `clear-agent-errors` 函數可以清除一個指定Agent上面的所有異常。 `shutdown-agents` 函數等待所有發送給agents的action都執行完畢。然后它停止線程池里面所有的線程。在這之后你就不能發送新的action了。我們一定要調用 `shutdown-agents` 以讓JVM 可以正常退出,因為Agent使用的這些線程不是守護線程, 如果你不顯式關閉的話,JVM是不會退出的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看