Quasar

Quasar和Project Loom

两盒软妹~` 提交于 2019-12-06 17:36:54
两年前用 Quasar 写过一个SS的server. 总体体验很好, 但是BUG不少. 后来没关注了, 突然发现Quasar的作者参与了 [Project Loom] ( http://cr.openjdk.java.net/~rpressler/loom/JVMLS2018.pdf ) 喜出望外啊~ 这下Java的协程是有希望了. 来源: oschina 链接: https://my.oschina.net/u/97951/blog/1926111

API聚合网关技术选型参考-网友实战-使用协程

时光毁灭记忆、已成空白 提交于 2019-12-06 17:36:41
http://www.open-open.com/lib/view/open1468892776625.html 最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题: 服务 A 是我们开发的系统,它的业务需要调用 B 、 C 、 D 等多个服务,这些服务是通过http的访问提供的。 问题是 B 、 C 、 D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency比较长。幸运地是这些服务都是集群部署的,容错率和并发支持都比较高,所以不担心它们的并发性能,唯一不爽的就是就是它们的Latency太高了。 系统A会从Client接收Request, 每个Request的处理都需要多次调用B、C、D的服务,所以完成一个Request可能需要1到2秒的时间。为了让A能更好地支持并发数,系统中使用线程池处理这些Request。当然这是一个非常简化的模型,实际的业务处理比较复杂。 可以预见,因为系统B、C、D的延迟,导致整个业务处理都很慢,即使使用线程池,但是每个线程还是会阻塞在B、C、D的调用上,导致I/O阻塞了这些线程, CPU利用率相对来说不是那么高。 当然在测试的时候使用的是B、C、D的模拟器,没有预想到它们的响应是那么慢,因此测试数据的结果还不错,吞吐率还可以,但是在实际环境中问题就暴露出来了。 概述

VueJs local assets path

人盡茶涼 提交于 2019-12-06 09:23:40
I'm working on a Vuejs App. based on Quasar Framework , in src/components/Hello.vue there i have a function to load json file axios.get('../assets/json/ar/myfile.json') .then(response => { // JSON responses are automatically parsed. console.log(response) }) .catch(e => { this.errors.push(e) }) it returns error, GET http://localhost:8080/assets/json/ar/ch78.json 404 (Not Found) so my question is how to get the file from src/assets folder ? axios.get('../assets/json/ar/myfile.json') this line need to be corrected If the data is static (as in this case) you could import it this way: import myFile

Java之协程(quasar)

跟風遠走 提交于 2019-12-06 00:11:55
 一、前面我们简单的说了一下,Python中的协程原理。这里补充Java的协程实现过程。有需要可以查看 python之协程 。   二、Java协程,其实做Java这么久我也没有怎么听过Java协程的东西,但是一直有有听到微线程/协程的概念,这不在学习Python的时候接触到了协程一词。然后返回来去了解Java的协程问题,但是看了很多资料,发现官网以及很多地方都没有涉及到协程的东西,没有办法,只能通过强大的社区来学习协程的相关东西。   三、这里主要关注的是: quasar。    1)协程的目的:当我们在使用多线程的时候,如果存在长时间的I/O操作。这个时候线程一直处于阻塞状态,如果线程很多的时候,会存在很多线程处于空闲状态,造成了资源应用不彻底。相对的协程不一样了,在单线程中多个任务来回自行如果出现长时间的I/O操作,让其让出目前的协程调度,执行下一个任务。当然可能所有任务,全部卡在同一个点上,但是这只是针对于单线程而言,当所有数据正常返回时,会同时处理当前的I/O操作。   2)多线程测试(这里使用100万个线程,来测试内存占用)  for (int i = 0; i < 1000000; i++) { new Thread(() -> { try { Thread.sleep(100000); } catch (InterruptedException e) { e

Java Async IO Library: Quasar (use Fiber)

喜你入骨 提交于 2019-12-06 00:11:38
前言 Quasar 提供很多的功能(Go-like channels, Erlang-like actors),这篇博客主要介绍Quasar的核心Fiber和使用Fiber来处理异步IO(本博客给出的例子是发起Http 请求)。 本博客所指的线程均指Linux下的线程,Linux下不区分线程和进程,特别的地方会再做说明。 Fiber是什么? Fiber(中文翻译成纤程) 是JVM上实现的轻量级用户态线程,和go 语言的goroutine 类似。Fiber 有如下几个特点: 用户态,用户态的线程切换是非常快的,而且单个时间片可以执行更多的代码(原因:操作系统何时进行线程调度(时间片用尽,IO中断,系统调用等))。众所周知,我们在进行系统调用(比如IO请求)的时候,当前的线程就会阻塞,产生线程上下文切换(从用户态切换到内核态) Context Switch ,关于这个方面的测试请查看 How long does it take to make a context switch? ,从这里可以看出上下文切换的代价是非常高的,这也正是Fiber的优势。 轻量级,Fiber 占有的资源非常少,一个fiber大概在400 bytes of RAM,所以系统里可以同时有上百万个Fiber。 为什么使用Fiber(或者说使用Threads有什么问题)? 先看一下在JVM

老外写的关于协程的性能文章-主打http协议

99封情书 提交于 2019-12-06 00:11:25
https://dzone.com/articles/high-concurrency-http-clients-on-the-jvm HTTP is probably the most popular application-level protocol and there are many libraries that implement it on top of network I/O, which is a special (stream-oriented) case of general I/O. Since all I/O has a much in common, let’s start with some discussion about it. I’ll concentrate on I/O cases with a lots of concurrent HTTP requests, for example micro-services, where a set of higher-level HTTP services invoke several lower-level ones, some concurrently and some sequentially due to data dependencies. When serving many such

Java Async IO Library: Quasar (use Channel)

青春壹個敷衍的年華 提交于 2019-12-05 03:30:46
前言 你如果熟悉go ,fiber (对于fiber可以简单理解成为轻量级线程)和 channel 就对应go 的goroutines 和channel,在go语言中用法如下: package main import "fmt" func sum(s []int, c chan int) { //方法执行体 sum := 0 for _, v := range s { sum += v } c <- sum // send sum to c } func main() { //main 函数 s := []int{7, 2, 8, -9, 4, 0} // 构建一个数组 c := make(chan int) //新建一个channel go sum(s[:len(s)/2], c) // 新起一个协程,然后在协程中执行方法,相当于new 一个fiber go sum(s[len(s)/2:], c) // new 一个fiber 。。 x, y := <-c, <-c // receive from c // 通过channel来传递消息 fmt.Println(x, y, x+y) } fiber example: Channel<Object> objectChannel = Channels.newChannel(0); // 0 ,receive() block

Java之协程(quasar)

只愿长相守 提交于 2019-11-30 03:00:55
 一、前面我们简单的说了一下,Python中的协程原理。这里补充Java的协程实现过程。有需要可以查看 python之协程 。   二、Java协程,其实做Java这么久我也没有怎么听过Java协程的东西,但是一直有有听到微线程/协程的概念,这不在学习Python的时候接触到了协程一词。然后返回来去了解Java的协程问题,但是看了很多资料,发现官网以及很多地方都没有涉及到协程的东西,没有办法,只能通过强大的社区来学习协程的相关东西。   三、这里主要关注的是: quasar。    1)协程的目的:当我们在使用多线程的时候,如果存在长时间的I/O操作。这个时候线程一直处于阻塞状态,如果线程很多的时候,会存在很多线程处于空闲状态,造成了资源应用不彻底。相对的协程不一样了,在单线程中多个任务来回自行如果出现长时间的I/O操作,让其让出目前的协程调度,执行下一个任务。当然可能所有任务,全部卡在同一个点上,但是这只是针对于单线程而言,当所有数据正常返回时,会同时处理当前的I/O操作。   2)多线程测试(这里使用100万个线程,来测试内存占用)  for (int i = 0; i < 1000000; i++) { new Thread(() -> { try { Thread.sleep(100000); } catch (InterruptedException e) { e