成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【JAVA新生】kilim版的協(xié)程

Barry_Ng / 1458人閱讀

摘要:試用了一下,發(fā)現(xiàn)它是基于的主要是。于是拿的代碼改了一個(gè)純協(xié)程的版本出來。兩個(gè)都是以提供和為主要,把協(xié)程的隱藏在下面。為了搞一個(gè)更簡單的,純協(xié)程來玩,把里無關(guān)的代碼都給刪了。結(jié)果在這里和官方的版本的不同在于,添加了一個(gè)方法相當(dāng)于的。

試用了一下 http://docs.paralleluniverse.co/quasar/,發(fā)現(xiàn)它是基于JDK 1.7的(主要是fork join pool)。于是拿kilim的代碼改了一個(gè)純協(xié)程的版本出來。kilim的原始版本(https://github.com/kilim/kilim)里所有的Task都與一個(gè)Scheduler綁定,而且官方的例子里都是講怎么使用Mailbox做messaging的。這個(gè)路數(shù)和stackless python非常像。兩個(gè)都是以提供scheduler和messaging為主要api,把協(xié)程的api隱藏在下面。為了搞一個(gè)更簡單的,純協(xié)程api來玩,把kilim里無關(guān)的代碼都給刪了。結(jié)果在這里:https://github.com/taowen/kilim

和官方的版本的不同在于,Task添加了一個(gè)方法resume(相當(dāng)于greenlet的switch)。第一次執(zhí)行resume的時(shí)候就是開始執(zhí)行這個(gè)task。如果task yield了,就會(huì)中途退出。要在斷點(diǎn)繼續(xù)的話,再次調(diào)用resume。

package hello_world;

import kilim.Pausable;
import kilim.Task;

public class Main {

    public static void main(String[] args) {
        Task task = new Task() {
            @Override
            public void execute() throws Pausable {
                System.out.println("hello");
                yield();
                System.out.println("world");
            }
        };
        task.resume();
        System.out.println("hey there");
        task.resume();
    }

}

代碼輸出如下

hello
hey there
world

要想執(zhí)行的話。要預(yù)先進(jìn)行weave。其實(shí)就是一條命令java kilim.tools.Weaver -d classesDir classesDir。但是要把這條命令整合到gradle的build過程中,還是很不容易的

apply plugin: "java"
apply plugin: "application"

mainClassName = "hello_world.Main"

repositories {
    mavenCentral()
    mavenLocal()
}

configurations {
    kilim
}

dependencies {
    compile "org.slf4j:slf4j-api:1.7.5"
    compile "org.github.taowen:kilim:1.0"
    kilim "org.github.taowen:kilim:1.0"
    testCompile "junit:junit:4.11"
}

task weave(type: JavaExec) {
    classpath "$project.buildDir/classes/main"
    classpath configurations.kilim
    main = "kilim.tools.Weaver"
    args "-d", "$project.buildDir/classes/main", "$project.buildDir/classes/main"
}

classes.dependsOn(weave)

關(guān)鍵點(diǎn)在于classes.dependsOn(weave),這樣可以讓weave在javaCompile之后,classes之前執(zhí)行。這種修改別的task的dependency的做法比ANT靈活多了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64157.html

相關(guān)文章

  • JAVA新生】echo server的第n種寫法

    摘要:基本上所有的網(wǎng)絡(luò)應(yīng)用都會(huì)示范一個(gè)的寫法。除了這些操作的主體是而不是,操作的是,而不是。以為例其過程是這樣的這段代碼就是創(chuàng)建一個(gè),并注冊(cè)一個(gè),并把附著到上。關(guān)鍵之一顯然是利用了協(xié)程的和,把回調(diào)轉(zhuǎn)換成順序的邏輯執(zhí)行。 基本上所有的網(wǎng)絡(luò)應(yīng)用都會(huì)示范一個(gè)tcp的echo寫法。前面我們已經(jīng)看到了如何使用協(xié)程和異步io來做tcp服務(wù)器的第一步,accept。下面是一個(gè)完整的echo server的...

    Luosunce 評(píng)論0 收藏0
  • 協(xié)程原理】 - 為什么greenlet的狀態(tài)無法被保存

    摘要:特別是最火的協(xié)程框架也無法保存狀態(tài),讓人非常惋惜。但是因?yàn)闂5谋旧頍o法持久化,所以也就無法持久化。其難度在于,假設(shè)整個(gè)要持久化的調(diào)用棧全部都是內(nèi)的,比如純的。采取的是暴力地把整個(gè)棧區(qū)域拷貝到上的方式來保存其狀態(tài)。 python主流的協(xié)程實(shí)現(xiàn)有五種: cPython的generator cPython的greenlet cPython的fibers stackless python ...

    verano 評(píng)論0 收藏0
  • 協(xié)程原理】 - Java中的協(xié)程

    摘要:很長一段時(shí)間,我都很天真的認(rèn)為,特別是以為代表的庫,才是協(xié)程的樂土。里是沒法實(shí)現(xiàn)協(xié)程,更別說實(shí)現(xiàn)這樣可以的協(xié)程的。咱真的是太井底之蛙了。不完全列表如下還有一個(gè)據(jù)作者說是最的這些協(xié)程庫的實(shí)現(xiàn)方式都是類似的,都是通過字節(jié)碼生成達(dá)到的目的。 很長一段時(shí)間,我都很天真的認(rèn)為python,特別是以gevent為代表的庫,才是協(xié)程的樂土。Java里是沒法實(shí)現(xiàn)協(xié)程,更別說實(shí)現(xiàn)stackless py...

    dongfangyiyu 評(píng)論0 收藏0
  • 次時(shí)代Java編程(一) Java里的協(xié)程 | 出續(xù)篇 更新ed

    摘要:所以系統(tǒng)的吞吐能力取決于每個(gè)線程的操作耗時(shí)。另外過多的線程,也會(huì)帶來更多的開銷。其代表派是以及里的新秀。類似線程也有自己的棧。線程中斷的條件只有兩個(gè),一個(gè)是拋異常,另外一個(gè)就是。 什么是協(xié)程(coroutine) 這東西其實(shí)有很多名詞,比如有的人喜歡稱為纖程(Fiber),或者綠色線程(GreenThread)。其實(shí)最直觀的解釋可以定義為線程的線程。有點(diǎn)拗口,但本質(zhì)上就是這樣。 我...

    gecko23 評(píng)論0 收藏0
  • JAVA新生】拿協(xié)程開始寫個(gè)異步io應(yīng)用

    摘要:接下來,就看怎么用協(xié)程來實(shí)現(xiàn)異步了。直接拿的原始寫代碼會(huì)死人的。引入?yún)f(xié)程就是為了把上下連續(xù)的業(yè)務(wù)邏輯放在一個(gè)協(xié)程里,把與業(yè)務(wù)關(guān)系不大的的處理部分放到框架的里。第三部分是放棄掉執(zhí)行權(quán)。這樣一個(gè)只能接收打印一行的異步應(yīng)用就寫好了。 前面已經(jīng)準(zhǔn)備好了greenlet對(duì)應(yīng)的Java版本了,一個(gè)刪減后的kilim(http://segmentfault.com/blog/taowen/11900...

    singerye 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<