---
title: 科技英文-Reactive Performance by Oleh Dokuka-1/2
---
#Reactive Performance by Oleh Dokuka-1/2
3
00:00:08,830 --> 00:00:11,300
are very happy that we have this session
我們很高興參加這次會議
4
00:00:11,500 --> 00:00:12,200
today
今天
5
00:00:12,400 --> 00:00:14,359
it's a beautiful Wednesday it's almost
這是一個美麗的星期三
6
00:00:14,558 --> 00:00:17,980
summer actually it's April and today
夏天實際上是四月和今天
7
00:00:18,179 --> 00:00:22,100
you're extremely happy to host another
您非常高興主辦另一個
8
00:00:22,300 --> 00:00:24,679
Oleg Oleg the COO card and the session
Oleg Oleg COO卡和會議
9
00:00:24,879 --> 00:00:26,839
will be about directive performance Oh
將與指令性能有關哦
Directive(adj)
10
00:00:27,039 --> 00:00:31,609
like reading hey hey hello glad to meet
喜歡閱讀嘿嘿你好見到
11
00:00:31,809 --> 00:00:32,299
you again
又是你
12
00:00:32,500 --> 00:00:35,329
and I'm fine what about you
我很好你呢
13
00:00:35,530 --> 00:00:39,259
I am absolutely perfect this is a topic
我絕對完美,這是一個話題
14
00:00:39,460 --> 00:00:41,358
that is a great interest for me
對我來說很有趣
15
00:00:41,558 --> 00:00:44,149
personally I know that you might be
我個人知道你可能是
16
00:00:44,350 --> 00:00:46,428
mentioning ground compiler and as a
提到地面編譯器,並作為
Compiler:to write down old data
17
00:00:46,628 --> 00:00:48,739
developer advocate for Grand Am project
Grand Am專案的開發宣導者
Advocate:to say something is great
18
00:00:48,939 --> 00:00:52,309
I'm extremely excited to hear whatever
我很高興聽到任何消息
19
00:00:52,509 --> 00:00:53,658
you're gonna say I hope you're gonna say
你會說我希望你會說
20
00:00:53,859 --> 00:00:58,279
good things about it so for our inverse
關於它的好事,對於我們的逆
Inverse:up side down
21
00:00:58,479 --> 00:01:00,318
before we start I hope everything is
在我們開始之前,我希望一切都好
22
00:01:00,518 --> 00:01:01,849
doing is going to fine I can see the
做的很好,我可以看到
23
00:01:02,049 --> 00:01:02,899
video on YouTube
YouTube上的視頻
24
00:01:03,100 --> 00:01:05,269
running let me just share the screen and
跑步讓我分享螢幕
25
00:01:05,469 --> 00:01:07,310
just give you cheap bits of information
只是給你便宜的資訊
26
00:01:07,510 --> 00:01:10,159
like literally show two slides for you
就像為您展示兩張幻燈片一樣
27
00:01:10,359 --> 00:01:12,649
hope you can see my screen so today's
希望你能看到我的螢幕,所以今天
28
00:01:12,849 --> 00:01:14,569
session in watching virtual Jack the
觀看虛擬傑克的會議
Virtual:VR=Virtual Reality
29
00:01:14,769 --> 00:01:17,000
virtual Java user group today's session
虛擬Java用戶組今天的會議
30
00:01:17,200 --> 00:01:19,039
is for active performance Oleg's twitter
是為了積極表演Oleg的推特
31
00:01:19,239 --> 00:01:21,709
is like the pooka you should follow him
就像是你應該跟隨他的pooka
32
00:01:21,909 --> 00:01:23,629
if you don't get the chance to ask a
如果您沒有機會問一個
33
00:01:23,829 --> 00:01:25,189
questions today
今天的問題
34
00:01:25,390 --> 00:01:27,709
you should thinking if you are watching
你應該想如果你在看
35
00:01:27,909 --> 00:01:29,989
this live you can ask questions in the
您可以在這個現場提問
36
00:01:30,189 --> 00:01:33,019
slack group so join our slack and there
鬆弛的團體,所以加入我們的鬆弛
37
00:01:33,219 --> 00:01:35,269
is a live session channel and even ask
是直播會話頻道,甚至問
38
00:01:35,469 --> 00:01:37,009
only question there and I will find that
唯一的問題,我會發現
39
00:01:37,209 --> 00:01:38,450
portion moment during the presentation
演講中的部分時刻
40
00:01:38,650 --> 00:01:41,569
and ask oh like your questions right
然後問哦,就像你的問題一樣
41
00:01:41,769 --> 00:01:45,319
stand you are welcome to shirt the
站起來,歡迎您來襯衫
42
00:01:45,519 --> 00:01:46,879
virtual jerk and this particular session
虛擬混蛋和這個特定的會議
43
00:01:47,079 --> 00:01:48,769
and if you have any feedback about the
如果您對
44
00:01:48,969 --> 00:01:50,780
quality about the topics about the
有關主題的品質
45
00:01:50,980 --> 00:01:53,359
presenters and how extremely excellent
演講者,以及如何出色
46
00:01:53,560 --> 00:01:56,239
there you can tweet at virtual jack or
在那裡您可以在虛擬插孔或
47
00:01:56,439 --> 00:01:59,569
at me personally Ashe life if you're
如果你是個人,我會在阿什生活中
48
00:01:59,769 --> 00:02:01,219
watching this on youtube and you don't
在youtube上觀看,您不會
49
00:02:01,420 --> 00:02:03,230
feel like the quality of the video is up
感覺視頻品質提高了
50
00:02:03,430 --> 00:02:05,659
to your expectations please use the COG
達到您的期望,請使用COG
51
00:02:05,859 --> 00:02:09,558
icon on the video widget to increase the
視頻小部件上的圖示以增加
52
00:02:09,758 --> 00:02:13,610
quality typically it goes up to 720p so
品質通常高達720p,因此
53
00:02:13,810 --> 00:02:13,850
it
它
54
00:02:14,050 --> 00:02:16,160
should be absolutely fine for watching
應該絕對適合觀看
55
00:02:16,360 --> 00:02:21,560
any anything literally right so with all
任何字面上正確的事情都如此
56
00:02:21,759 --> 00:02:23,930
that important official organizational
那個重要的官方組織
57
00:02:24,129 --> 00:02:28,850
info out of our way I'm very happy to
資訊讓我們很高興
58
00:02:29,050 --> 00:02:31,400
present all of T he is a contributor to
目前所有他都是
contributor to(N):give something to other people to use
59
00:02:31,599 --> 00:02:34,280
project director he's an open source
項目總監,他是一個開源
60
00:02:34,479 --> 00:02:38,500
committer he is a consultant in the java
他是Java的顧問
61
00:02:38,699 --> 00:02:42,260
software engineer for i think many many
我認為很多的軟體工程師
62
00:02:42,460 --> 00:02:46,790
years reasonably many years he looks
他看起來好多年
63
00:02:46,990 --> 00:02:50,780
mean but a sufficient amount of years to
意味著但足夠長的時間
64
00:02:50,979 --> 00:02:53,420
become an expert and she wrote a book
成為專家,她寫了一本書
65
00:02:53,620 --> 00:02:59,150
right yeah I did project fraktur I
是的,我確實做了我的專案
Fraktur:software name
66
00:02:59,349 --> 00:03:02,390
aspire to write a book one day so when I
渴望有一天寫一本書,所以當我
67
00:03:02,590 --> 00:03:04,640
grow up I want to be more like you
長大後我想變得更像你
68
00:03:04,840 --> 00:03:07,370
so without further ado please welcome
因此,事不宜遲,請歡迎
69
00:03:07,569 --> 00:03:10,580
poet and we'll see you in the live
詩人,我們會在現場見到你
70
00:03:10,780 --> 00:03:14,540
session channel on slack oh look it's
會話頻道閒置哦,看起來是
71
00:03:14,740 --> 00:03:16,700
alright befores yeah let me share my
好吧,是的,讓我分享我的
72
00:03:16,900 --> 00:03:21,110
screen first and save on my camera
首先螢幕並保存在我的相機上
73
00:03:21,310 --> 00:03:23,750
intern in order to improve the
為了提高實習生的
74
00:03:23,949 --> 00:03:26,450
performance so yeah do see it I guess
性能,所以我確實看到了
75
00:03:26,650 --> 00:03:32,320
you can see yourself alright yeah I
你可以看到自己好吧,我
76
00:03:32,520 --> 00:03:38,090
guess we can start and today's topic is
猜想我們可以開始,今天的話題是
77
00:03:38,289 --> 00:03:40,670
reactive performance this is the first
反應性能這是第一
78
00:03:40,870 --> 00:03:46,319
part of the of this reactive performance
此無功表現的一部分
79
00:03:46,650 --> 00:03:48,469
presentation because there is I'm
演示文稿,因為有我
80
00:03:48,669 --> 00:03:51,770
planning to to give another part and in
計畫做出另一部分貢獻
81
00:03:51,969 --> 00:03:54,610
order to save your time and in order to
為了節省您的時間,並為了
82
00:03:54,810 --> 00:03:59,689
make this watching and this video as
觀看此視頻,並將其作為
83
00:03:59,889 --> 00:04:02,180
much as possible productive for you I
我為您帶來盡可能多的生產力
84
00:04:02,379 --> 00:04:05,000
would like to start with with some
想從一些開始
85
00:04:05,199 --> 00:04:07,640
slides that describes what is this talk
幻燈片描述了這個話題
86
00:04:07,840 --> 00:04:10,210
about and for whom this talk is
談論的物件和物件
87
00:04:10,409 --> 00:04:13,360
especially first of all expect that
特別是首先期望
88
00:04:13,560 --> 00:04:17,538
everyone who listens this this
每個聽這個的人
89
00:04:17,738 --> 00:04:20,840
presentation in this talk have ever
在這個演講中的演講曾經
90
00:04:21,040 --> 00:04:22,670
heard about reactive programming
聽說過反應式程式設計
91
00:04:22,870 --> 00:04:26,220
reactive streams about Eric's Java and
關於Eric的Java和
Reactive:make something happen
Streams:live video on the internet
92
00:04:26,420 --> 00:04:31,829
reactor 3 for example I expect that you
例如3號反應堆,我希望你
93
00:04:32,029 --> 00:04:33,840
know something about that you try that
知道一些你嘗試
94
00:04:34,040 --> 00:04:36,810
and you want to tune your performance of
而您想調整您的表現
95
00:04:37,009 --> 00:04:39,329
your reactive application where you are
您所在的反應式應用程式
96
00:04:39,529 --> 00:04:45,420
using one of those libraries and I would
使用這些庫之一,我會
97
00:04:45,620 --> 00:04:47,910
like to pay attention that during this
喜歡注意在此期間
98
00:04:48,110 --> 00:04:50,550
talk we are going to look at directive
談談我們要看的指令
99
00:04:50,750 --> 00:04:52,290
streams under the hood we are going to
流將在引擎蓋下
100
00:04:52,490 --> 00:04:54,960
understand what is going on inside
瞭解裡面發生了什麼
101
00:04:55,160 --> 00:04:57,810
direct streams how it works and so far
引導流如何運行,到目前為止
102
00:04:58,009 --> 00:05:01,199
and soul then we will try to understand
和靈魂,那麼我們將嘗試瞭解
103
00:05:01,399 --> 00:05:04,350
what is what is hidden in our excavator
我們的挖掘機隱藏了什麼
Excavator:to take out very carefully
104
00:05:04,550 --> 00:05:06,780
and reactors and reactor 3 what hidden
和反應堆和反應堆3隱藏了什麼
Reactors:the power station for nuclear in 墾丁(核能)
105
00:05:06,980 --> 00:05:09,420
properties they have and how we can tune
他們擁有的屬性以及我們如何調整
Tune:to change something make it perfect
Tone:sound
106
00:05:09,620 --> 00:05:13,620
them then we will try to find out maybe
他們,那麼我們將嘗試找出也許
107
00:05:13,819 --> 00:05:17,790
better GC for rectaive streams and try to
更好的GC用於直腸流,並嘗試
108
00:05:17,990 --> 00:05:20,639
optimize our streams with growl as JIT
通過咆哮作為JIT優化我們的流
Optimize:to improve to be the best
Growl:software
109
00:05:20,839 --> 00:05:22,949
compiler so during this talk you should
編譯器,因此在本次演講中,您應該
110
00:05:23,149 --> 00:05:26,100
expect those topics and you should
期待那些主題,您應該
111
00:05:26,300 --> 00:05:29,100
understand that you have to have some
瞭解你必須要有一些
112
00:05:29,300 --> 00:05:31,020
some knowledge about reactive streams
關於反應流的一些知識
113
00:05:31,220 --> 00:05:33,540
and understanding of essentials of
和理解的要點
114
00:05:33,740 --> 00:05:35,160
reactive streams like back pressure
反應性物流,例如背壓
115
00:05:35,360 --> 00:05:38,129
control and a synchronous message
控制和同步消息
Synchronous:something happen in the same way and same time
116
00:05:38,329 --> 00:05:41,160
passing and so forth and so on and you
路過等等等等,你
117
00:05:41,360 --> 00:05:43,410
should take into account that without
應該考慮到沒有
118
00:05:43,610 --> 00:05:45,680
those knowledge is you will probably
這些知識就是你可能
119
00:05:45,879 --> 00:05:49,800
won't get fully this this conversation
這次談話不會完全
120
00:05:50,000 --> 00:05:52,740
in this discussion and bone get and the
在這個討論中,骨得到和
121
00:05:52,939 --> 00:05:56,610
whole the whole knowledge about the the
整個關於
122
00:05:56,810 --> 00:05:58,920
reactive tuned Yin without understanding
音調無知
123
00:05:59,120 --> 00:06:05,129
the centrioles so let me start and if
中心,所以讓我開始,如果
124
00:06:05,329 --> 00:06:07,379
you still think that this topic is for
您仍然認為該主題是針對
125
00:06:07,579 --> 00:06:10,230
you let me introduce myself as oleg
你讓我自我介紹
126
00:06:10,430 --> 00:06:12,270
mentioned my name is Oleg I'm from
提到我的名字叫奧列格,我來自
127
00:06:12,470 --> 00:06:15,360
Ukraine from Kiev I bought from NATO
我從北約買的基輔的烏克蘭
128
00:06:15,560 --> 00:06:18,509
fiber we are building reactive streams
纖維,我們正在建設反應流
129
00:06:18,709 --> 00:06:21,509
over the network so we are built in new
通過網路,因此我們內置了新的
130
00:06:21,709 --> 00:06:23,189
future protocol called
未來協議稱為
131
00:06:23,389 --> 00:06:27,360
our socket and also I am I'm contributor
我們的插座,我也是我的貢獻者
132
00:06:27,560 --> 00:06:29,850
to project veteran and I'm doing my best
投射老兵,我正在盡我所能
Veteran:do something many years and good
133
00:06:30,050 --> 00:06:33,120
to improve that project from popular
從流行改善該項目
134
00:06:33,319 --> 00:06:36,410
decide and as well as from performance I
決定,以及根據表現我
135
00:06:36,610 --> 00:06:39,569
also I am organizing and
我也在組織和
136
00:06:39,769 --> 00:06:41,610
helping with organizing one of the
説明組織其中之一
137
00:06:41,810 --> 00:06:43,740
biggest fuels the biggest conference in
最大的燃料最大的會議
Fuels:oil
138
00:06:43,939 --> 00:06:46,050
Ukraine like GE conf and daleks Ukraine
烏克蘭像GE conf和daleks烏克蘭
139
00:06:46,250 --> 00:06:48,749
and improve my improves my local
並提高我的水準
140
00:06:48,949 --> 00:06:51,778
community or by organizing joeys or
社區或組織喬伊或
141
00:06:51,978 --> 00:06:56,218
groups so first of all you should ask
分組,所以首先您應該問
142
00:06:56,418 --> 00:06:58,679
the main question should we care about
我們應該關心的主要問題
143
00:06:58,879 --> 00:07:02,069
performance in reactive streams in order
反應流中的性能按順序
144
00:07:02,269 --> 00:07:04,709
to answer this question I'm going to
回答這個問題,我要
145
00:07:04,908 --> 00:07:07,920
show you a few few screenshots the first
給你看幾個截圖
146
00:07:08,120 --> 00:07:10,050
one is this this is a performance
一個是這是一場表演
147
00:07:10,250 --> 00:07:12,709
comparison between Java streams and
Java流與
148
00:07:12,908 --> 00:07:15,420
reactive streams and as you can see
反應性流,如您所見
149
00:07:15,620 --> 00:07:18,300
there is slight performance difference
性能略有差異
150
00:07:18,500 --> 00:07:22,410
like 5% in performance so yeah not that
像5%的表現,是的,不是
151
00:07:22,610 --> 00:07:25,259
much but you can just imagine that in
很多,但是你可以想像
152
00:07:25,459 --> 00:07:28,020
real production where we are running a
我們正在運行的實際生產
153
00:07:28,220 --> 00:07:30,180
lot of servers we are where we are
我們在很多伺服器上
154
00:07:30,379 --> 00:07:33,718
handling thousands or millions of user
處理成千上萬的用戶
155
00:07:33,918 --> 00:07:37,499
requests 5% of performance can for
要求提供5%的效果
156
00:07:37,699 --> 00:07:40,939
something especially it can boards some
特別是它可以登上一些東西
157
00:07:41,139 --> 00:07:43,350
customers money or something like that
客戶花錢之類的
158
00:07:43,550 --> 00:07:47,850
on the other hand we can take a look at
另一方面,我們可以看看
159
00:07:48,050 --> 00:07:50,209
another performance comparison between
之間的另一個性能比較
160
00:07:50,408 --> 00:07:53,639
reactive libraries and between plane for
反應庫和平面之間
161
00:07:53,839 --> 00:07:56,369
loop and as you can see if if you can
迴圈,如您所見,是否可以
162
00:07:56,569 --> 00:07:58,468
pay your attention to those numbers you
注意那些數字,你
163
00:07:58,668 --> 00:08:00,990
will see that performance difference
會看到性能差異
164
00:08:01,189 --> 00:08:03,540
between plane for loop between plane
平面間換平面
165
00:08:03,740 --> 00:08:05,910
imperative programming and reactive
命令式程式設計和反應式
Imperative:you need to now
Can(use now)/could(future)->may->should->need to->must
(weak->strong)
166
00:08:06,110 --> 00:08:08,699
libraries is not that five percent but
圖書館不是百分之五,而是
167
00:08:08,899 --> 00:08:12,600
five times higher or five times faster
高五倍或快五倍
168
00:08:12,800 --> 00:08:16,319
than react to streams so now you should
而不是對流做出反應,所以現在您應該
169
00:08:16,519 --> 00:08:20,129
ask your question why should we care and
問你一個問題,我們為什麼要關心和
170
00:08:20,329 --> 00:08:22,639
I guess seeing those numbers you should
我想看到那些數字你應該
171
00:08:22,839 --> 00:08:24,959
understand that we care we should care
瞭解我們在乎我們應該在乎
172
00:08:25,158 --> 00:08:26,879
about performance because performance
關於性能,因為性能
173
00:08:27,079 --> 00:08:30,389
overhead of reactive libraries is huge
反應式庫的開銷巨大
174
00:08:30,589 --> 00:08:33,088
like five times overhead so let me
像五倍的開銷,讓我
175
00:08:33,288 --> 00:08:34,828
quickly start with the agenda and
快速開始議程
176
00:08:35,028 --> 00:08:37,409
explain what we are going to do today
解釋我們今天要做什麼
177
00:08:37,610 --> 00:08:39,689
first of all we are going to understand
首先我們要瞭解
178
00:08:39,889 --> 00:08:42,419
why we have the this overhead in
為什麼我們有這個開銷
179
00:08:42,620 --> 00:08:45,089
reactive libraries then we are going to
反應性庫,然後我們將
180
00:08:45,289 --> 00:08:48,328
then I am going to share some tuning
然後我要分享一些調整
Tuning:to make perfect
181
00:08:48,528 --> 00:08:50,519
types and trips this is not called
類型和行程
182
00:08:50,720 --> 00:08:51,769
changing I think
我想改變
183
00:08:51,970 --> 00:08:54,378
mentioned earlier this is the first part
前面提到這是第一部分
184
00:08:54,578 --> 00:08:58,308
of reactive performance presentation and
無功表現介紹和
185
00:08:58,509 --> 00:09:00,049
in this presentation we are going to
在本演示中,我們將要
186
00:09:00,250 --> 00:09:03,709
talk about not God changes too in types
談論上帝在類型上也不會改變
187
00:09:03,909 --> 00:09:06,889
and tricks because you're running your
和技巧,因為您正在運行
188
00:09:07,089 --> 00:09:08,419
application in production
在生產中的應用
189
00:09:08,620 --> 00:09:11,118
you're already you brought your code or
您已經帶來了代碼或
190
00:09:11,318 --> 00:09:14,438
you are planning to write something and
你打算寫點東西,
191
00:09:14,639 --> 00:09:18,198
if you're if you're if you are the first
如果你是,如果你是第一個
192
00:09:18,399 --> 00:09:21,368
part of the audience who has already
已經有一部分觀眾
193
00:09:21,568 --> 00:09:24,169
written some application using react to
使用react編寫了一些應用程式
194
00:09:24,370 --> 00:09:27,289
streams you put you are probably won't
您投放的資訊流可能不會
195
00:09:27,490 --> 00:09:31,459
be able to you won't be able to rewrite
能夠你將無法重寫
196
00:09:31,659 --> 00:09:35,719
your code or refactor it just just after
您的代碼或僅在之後進行重構
197
00:09:35,919 --> 00:09:36,649
this presentation
這個演講
198
00:09:36,850 --> 00:09:39,078
those I'm going to share some some
那些我要分享一些
199
00:09:39,278 --> 00:09:42,349
minimal types and tricks in order to
最少的類型和技巧,以便
200
00:09:42,549 --> 00:09:44,688
improve your performance without any
毫無任何改善的表現
201
00:09:44,889 --> 00:09:47,779
code changes just by tuning gvm and so
僅通過調整gvm等更改代碼
202
00:09:47,980 --> 00:09:49,818
for and so on and finally we are going
等等,最後我們要去
203
00:09:50,019 --> 00:09:52,609
to experiment with a real app written
嘗試編寫一個真實的應用程式
204
00:09:52,809 --> 00:09:54,919
fully interactive streams using our
使用我們的完全互動流
205
00:09:55,120 --> 00:09:57,198
socket and spring and we are going to
插座和彈簧,我們將要
Spring:彈簧
206
00:09:57,399 --> 00:09:59,868
understand whether we can improve the
瞭解我們是否可以改善
207
00:10:00,068 --> 00:10:01,878
performance of this this application
此應用程式的性能
208
00:10:02,078 --> 00:10:04,549
using previously mentioned types and
使用前面提到的類型和
209
00:10:04,750 --> 00:10:07,909
tricks so let me start and let me
技巧,讓我開始,讓我
210
00:10:08,110 --> 00:10:11,419
quickly introduce and explain both
快速介紹並解釋兩者
211
00:10:11,620 --> 00:10:13,938
overhead we have in reactive streams
反應流中的開銷
Overhead:背後
212
00:10:14,139 --> 00:10:16,698
first of all we have to start with
首先,我們必須從
213
00:10:16,899 --> 00:10:18,678
streams like streams life cycle because
流就像流生命週期一樣,因為
214
00:10:18,879 --> 00:10:20,479
this is the most essential part of
這是最重要的部分
215
00:10:20,679 --> 00:10:22,909
reactive streams composition react to
反應性物流成分對
216
00:10:23,110 --> 00:10:25,308
streams sampling running and so foreign
流採樣運行等
217
00:10:25,509 --> 00:10:27,738
zone and starting from that point we are
區域,從這一點開始,我們是
218
00:10:27,938 --> 00:10:30,948
going to understand what overhead we get
會明白我們得到了什麼開銷
219
00:10:31,149 --> 00:10:33,198
with reactive strings so first of all
用反應性的弦,所以首先
220
00:10:33,399 --> 00:10:36,589
there is a three main life cycle stage
有三個主要的生命週期階段
221
00:10:36,789 --> 00:10:38,628
in reactive streams the first one is
在反應流中,第一個是
222
00:10:38,828 --> 00:10:42,049
when we call from array when we call map
當我們從陣列調用地圖時
223
00:10:42,250 --> 00:10:45,618
filter and whatever operators and this
篩檢程式以及任何運算子
Filter:tell you something good or bad
224
00:10:45,818 --> 00:10:48,019
stage is basically calling assembling
階段基本上是召集
225
00:10:48,220 --> 00:10:51,318
because we just assemble our pipeline we
因為我們只是組裝管道
226
00:10:51,519 --> 00:10:54,219
don't run any data we haven't had any
不要運行任何我們沒有的資料
227
00:10:54,419 --> 00:10:56,928
subscription so far we just combine and
到目前為止,我們只是將
228
00:10:57,129 --> 00:10:59,748
we just build our pipeline through we
我們只是通過我們建立管道
229
00:10:59,948 --> 00:11:02,328
are going to send our data so this is
將要發送我們的資料,所以這是
230
00:11:02,528 --> 00:11:04,998
just an assembling stage where we don't
只是一個組裝階段,我們不
231
00:11:05,198 --> 00:11:05,750
have any
有什麼
232
00:11:05,950 --> 00:11:09,589
in so far just a pipeline of objects the
到目前為止,只是對象的管道
233
00:11:09,789 --> 00:11:12,409
second stage in the lifecycle of reactor
反應堆生命週期的第二階段
234
00:11:12,610 --> 00:11:15,169
streams is basically subscribed when we
當我們
235
00:11:15,370 --> 00:11:17,569
subscribe to this stream and this is
訂閱此流,這是
236
00:11:17,769 --> 00:11:19,729
basically a terminal operator when we
基本上是終端運營商
237
00:11:19,929 --> 00:11:23,029
asking for some data and exposing our
要求一些資料並公開我們的
238
00:11:23,230 --> 00:11:26,059
intent to receive those data so exist at
意圖接收這些資料,因此存在於
239
00:11:26,259 --> 00:11:29,679
this stage we are passing to you our
這個階段我們傳遞給你我們
240
00:11:29,879 --> 00:11:32,209
publisher or reactive stream the
發佈者或反應流
241
00:11:32,409 --> 00:11:34,699
subscriber the subscriber object which
訂閱者訂閱者對象
242
00:11:34,899 --> 00:11:38,719
is flow up to you to our publisher and
由您流向我們的發佈商,並且
243
00:11:38,919 --> 00:11:41,990
using this subscriber publisher start
使用此訂閱者的發佈者開始
244
00:11:42,190 --> 00:11:44,809
executing some and calling some methods
執行一些並調用一些方法
245
00:11:45,009 --> 00:11:48,139
like unsubscribe through which publisher
就像通過哪個發佈者退訂
246
00:11:48,340 --> 00:11:52,059
sends its subscription to the subscriber
將其訂閱發送給訂閱者
247
00:11:52,259 --> 00:11:55,189
this stage is basically call it a
這個階段基本上稱之為
248
00:11:55,389 --> 00:11:57,559
subscription time because we don't have
訂閱時間,因為我們沒有
249
00:11:57,759 --> 00:12:00,529
any detest data so far at this stage we
到目前為止,我們目前尚有任何討厭的資料
250
00:12:00,730 --> 00:12:03,979
just exchange in exchange in our we are
只是交換我們的交換
251
00:12:04,179 --> 00:12:06,439
doing handshake or something that and
做握手之類的
252
00:12:06,639 --> 00:12:08,559
just we just exchanging subscriber
只是我們只是交換訂戶
253
00:12:08,759 --> 00:12:11,419
versus subscription in order to start
與訂閱開始
254
00:12:11,620 --> 00:12:14,829
our communication and the final stage at
我們的溝通和最後階段
255
00:12:15,029 --> 00:12:19,549
reactive streams lifecycle is actually
反應流的生命週期實際上是
256
00:12:19,750 --> 00:12:22,149
run time at which we are star calling or
我們在星際大戰中運行的時間
257
00:12:22,350 --> 00:12:24,829
requesting data for example we are going
請求資料,例如我們要去
258
00:12:25,029 --> 00:12:27,379
to request five elements from from our
要求我們的五個要素
259
00:12:27,580 --> 00:12:31,339
publisher and our publisher star starts
發佈者和我們的發佈者之星開始
260
00:12:31,539 --> 00:12:34,819
sending the data to the overt subscriber
將資料發送到公開訂戶
261
00:12:35,019 --> 00:12:38,719
and we somehow going to are going to
而且我們將要去
262
00:12:38,919 --> 00:12:43,849
process them so this stage is basically
處理它們,所以這個階段基本上是
263
00:12:44,049 --> 00:12:46,159
called at run time at which we are
在我們所處的運行時調用
264
00:12:46,360 --> 00:12:49,579
actually handling some data processing
實際處理一些資料處理
265
00:12:49,779 --> 00:12:52,939
them and somehow react to all incoming
他們以某種方式對所有傳入的消息做出反應
266
00:12:53,139 --> 00:12:55,339
embeds so this is basically what is
嵌入,所以這基本上是什麼
Embeds:to put something into something
267
00:12:55,539 --> 00:12:58,250
going on when we start doing actual
當我們開始做實際的時候
268
00:12:58,450 --> 00:13:00,349
communication between for example client
例如用戶端之間的通信
269
00:13:00,549 --> 00:13:02,899
and server in UF locks and so forth and
和伺服器中的UF鎖等等
270
00:13:03,100 --> 00:13:06,799
so on so let me quickly show you this
等等,讓我快速向您展示
271
00:13:07,000 --> 00:13:12,919
basic life cycle by debugging some small
通過調試一些小的基本生命週期
272
00:13:13,120 --> 00:13:15,829
plain application as which I mention it
我提到的普通應用程式
273
00:13:16,029 --> 00:13:19,479
on my slides so hope everyone
在我的幻燈片上,希望大家
274
00:13:19,679 --> 00:13:25,990
but see my code and my IDE well and what
但是很好地瞭解我的代碼和IDE,以及
275
00:13:26,190 --> 00:13:28,240
I have here basically I'm using in my
我基本上在這裡用
276
00:13:28,440 --> 00:13:31,389
project project reactor which is from
專案專案反應堆是從
277
00:13:31,589 --> 00:13:35,049
pilot Hall which is extensively used in
飛行員廳廣泛用於
278
00:13:35,250 --> 00:13:39,519
in Spring Framework five and I fear I
在Spring Framework 5中,我擔心我
279
00:13:39,720 --> 00:13:42,189
have really plain and an uncomplicated
真的很簡單
280
00:13:42,389 --> 00:13:45,120
co-op which I going which I'm going to
我要去的合作社
281
00:13:45,320 --> 00:13:48,459
run right now and I'm going to explain
現在運行,我將解釋
282
00:13:48,659 --> 00:13:51,039
what is going on it under the hood in
在引擎蓋下發生了什麼
283
00:13:51,240 --> 00:13:53,169
order to you to ensure you that
為了確保您
284
00:13:53,370 --> 00:13:56,258
everything works as a same engine so
一切都像一個引擎一樣工作
285
00:13:56,458 --> 00:13:59,109
first of all we started assembling the
首先,我們開始組裝
286
00:13:59,309 --> 00:14:03,099
code we got our publisher created and
我們創建發佈者的代碼,
287
00:14:03,299 --> 00:14:07,508
now we are going to subscribe to this to
現在我們要訂閱這個
288
00:14:07,708 --> 00:14:09,849
this publisher at this stage we are
這個階段的發佈者
289
00:14:10,049 --> 00:14:13,089
going to cook to create some lump the
要煮一些塊
290
00:14:13,289 --> 00:14:15,099
basis subscribers so this is building
基礎訂戶,所以這正在建設
291
00:14:15,299 --> 00:14:16,899
feature of project reactor you can
項目反應堆的功能可以
292
00:14:17,100 --> 00:14:19,328
create your subscriber just by calling
只需致電即可創建您的訂戶
293
00:14:19,528 --> 00:14:22,269
you subscriber and passing in the same
您的訂戶並傳遞相同的
294
00:14:22,470 --> 00:14:25,229
way but I'm going to just create no ops
方式,但我將不創建任何操作
295
00:14:25,429 --> 00:14:29,889
subscriber as you can see here and in a
您可以在此處和
296
00:14:30,089 --> 00:14:32,258
few more steps yeah I have to skip this
還有更多步驟,是的,我必須跳過此步驟
297
00:14:32,458 --> 00:14:37,349
it's off I'm going to pass yeah this guy
這是關閉,我要通過是的,這個傢伙
298
00:14:37,549 --> 00:14:41,589
mom I'm going to subscribe to my to my
媽媽,我要訂閱我的
299
00:14:41,789 --> 00:14:44,469
stream using normal method at that stage
在該階段使用常規方法進行流
300
00:14:44,669 --> 00:14:48,429
I'm just passing all through all some
我只是穿過所有
301
00:14:48,629 --> 00:14:55,258
additional stages my subscriber some
其他階段我的訂戶一些
302
00:14:55,458 --> 00:15:00,129
some internal invocations and after all
一些內部調用,畢竟
303
00:15:00,330 --> 00:15:03,039
yeah we got to flux or radius
是的,我們到達了通量或半徑
Radius: 半徑
Flux:something is always change
304
00:15:03,240 --> 00:15:06,758
implementation of rate of wrapper around
包裝率的實施
305
00:15:06,958 --> 00:15:09,789
array like publisher for array and now
像發佈者一樣排列陣列,現在
306
00:15:09,990 --> 00:15:13,000
at this stage I'm going to to enter the
在這個階段,我要進入
307
00:15:13,200 --> 00:15:15,969
flux or a subscribe method which is the
通量或訂閱方法
308
00:15:16,169 --> 00:15:18,008
most interested for us the most
對我們最感興趣
309
00:15:18,208 --> 00:15:20,559
interesting for us at the moment
目前對我們很有趣
310
00:15:20,759 --> 00:15:24,039
at this stage I'm just going to walk
在這個階段我要走
311
00:15:24,240 --> 00:15:28,269
through some some conditions and as you
通過一些條件和你
312
00:15:28,470 --> 00:15:32,078
can see here we got a subscriber so this
可以看到這裡我們有一個訂戶,所以這個
313
00:15:32,278 --> 00:15:33,399
is basically a
基本上是
314
00:15:33,600 --> 00:15:36,998
subscriber I mentioned on my slides and
我在幻燈片上提到的訂閱者
315
00:15:37,198 --> 00:15:42,039
now as I said we are going to send a
現在,正如我所說,我們將發送一個
316
00:15:42,240 --> 00:15:45,490
subscription $2.00 subscriber so at that
訂閱$ 2.00訂閱者,因此
317
00:15:45,690 --> 00:15:48,998
stage we are going to just do in
我們將要做的階段
318
00:15:49,198 --> 00:15:51,729
subscription or data exchange in and by
內或之間的訂閱或資料交換
319
00:15:51,929 --> 00:15:55,719
doing that yeah I have to that guy I
是的,我必須對那個人我
320
00:15:55,919 --> 00:16:02,128
have to guy and here we go we got our
必須要傢伙,在這裡我們走了,我們得到了
321
00:16:02,328 --> 00:16:05,529
subscription and after all we can ask
訂閱,畢竟我們可以問
322
00:16:05,730 --> 00:16:07,748
for some data for example in that case
對於那種情況下的一些資料
323
00:16:07,948 --> 00:16:10,328
we are going to ask for all data by
我們將要求提供所有資料
324
00:16:10,528 --> 00:16:14,258
sending long Maxwell requests so this at
發送長的Maxwell請求,因此在
325
00:16:14,458 --> 00:16:17,558
this stage we just got we just finally
在這個階段,我們終於得到了
326
00:16:17,759 --> 00:16:21,188
exchange it all required or rigid
交換所有必需的或固定的
327
00:16:21,389 --> 00:16:23,469
handshake between our publisher and
我們的發佈者與
Handshake:to check the data is real between two computer
328
00:16:23,669 --> 00:16:26,729
subscriber and now we can start
訂戶,現在我們可以開始
329
00:16:26,929 --> 00:16:29,409
requesting or we can start doing one
請求,或者我們可以開始做一個
330
00:16:29,610 --> 00:16:32,618
time at this moment for example once we
例如,此時此刻的時間
331
00:16:32,818 --> 00:16:37,149
ask it for some data publisher react to
要求一些資料發佈者做出反應
332
00:16:37,350 --> 00:16:40,258
that request and we'll start sending
該請求,我們將開始發送
333
00:16:40,458 --> 00:16:44,229
elements that it has in his arsenal by
它在他的武器庫中的元素
334
00:16:44,429 --> 00:16:46,659
calling on next method and then we are
調用下一個方法,然後
335
00:16:46,860 --> 00:16:48,998
going to consume every element that
將消耗掉所有的元素
336
00:16:49,198 --> 00:16:51,339
publisher sends to us and so foreign to
出版商發送給我們,因此對
337
00:16:51,539 --> 00:16:55,479
own and to the foreign zone until stream
擁有並前往國外地區,直到流
338
00:16:55,679 --> 00:16:58,209
completion which is which means that we
完成,這意味著我們
339
00:16:58,409 --> 00:17:01,628
don't have the publishers and every
沒有出版商
340
00:17:01,828 --> 00:17:05,769
saying that it has and it doesn't and it
說它有,沒有,有
341
00:17:05,970 --> 00:17:08,529
sends only their final terminal signal
僅發送其最終終端信號
342
00:17:08,730 --> 00:17:12,430
to its subscriber so this is basically
給它的用戶,所以基本上
343
00:17:12,630 --> 00:17:16,029
eat and now I hope you ensure that we
吃,現在我希望你能確保我們
344
00:17:16,230 --> 00:17:20,019
have all these mansion at stages during
所有這些豪宅都在
345
00:17:20,220 --> 00:17:20,588
rant
rant :one person talking for a long time
346
00:17:20,788 --> 00:17:24,069
during empower react to streams so
在授權期間對流做出反應,因此
347
00:17:24,269 --> 00:17:27,759
basically assembling subscription which
基本組裝的訂閱
348
00:17:27,959 --> 00:17:30,549
means send in a subscriber to publisher
意味著將訂閱者發送給發佈者
349
00:17:30,750 --> 00:17:32,229
and receiving subscription and then
並接收訂閱,然後
350
00:17:32,429 --> 00:17:34,598
runtime which is which means sending all
運行時,這意味著發送所有
351
00:17:34,798 --> 00:17:38,919
this data to this subscriber alright so
這個資料給這個使用者
352
00:17:39,119 --> 00:17:43,059
this is the first stage that you this is
這是你的第一階段
353
00:17:43,259 --> 00:17:46,569
the first part that you have to remember
您必須記住的第一部分
354
00:17:46,769 --> 00:17:47,109
about
關於
355
00:17:47,309 --> 00:17:49,480
two streams but this is not the most
兩個流,但這不是最
356
00:17:49,680 --> 00:17:52,930
important because in general let me
重要,因為總的來說讓我
357
00:17:53,130 --> 00:17:54,789
summarize quickly sampling means
快速總結採樣方式
358
00:17:54,990 --> 00:17:56,859
creation the publisher subscription
創建發佈者訂閱
359
00:17:57,059 --> 00:17:59,079
means exchanging data and the rest is
表示交換資料,其餘的是
360
00:17:59,279 --> 00:18:05,200
runtime so this you if you remember what
運行時,如果您還記得這
361
00:18:05,400 --> 00:18:07,180
is going on inside Java streams you
正在Java流中進行
362
00:18:07,380 --> 00:18:10,779
should remember that Java streams has
應該記住Java流具有
363
00:18:10,980 --> 00:18:12,700
something similar to your reactor
與你的反應堆相似
364
00:18:12,900 --> 00:18:15,659
streams if you're going back to to our
如果您要回到我們的網站
365
00:18:15,859 --> 00:18:18,879
IDE and take a look at what is going on
IDE,看看發生了什麼
366
00:18:19,079 --> 00:18:24,700
base for example is is real Java streams
例如,基礎是真正的Java流
367
00:18:24,900 --> 00:18:29,680
for example like this you quickly create
例如您可以快速創建
368
00:18:29,880 --> 00:18:34,930
some example for you and call it for
給你一些例子,並稱之為
369
00:18:35,130 --> 00:18:37,480
each we will basically got almost
每個我們基本上都會得到
370
00:18:37,680 --> 00:18:41,649
similar execution flow as in reactive
與反應式類似的執行流程
371
00:18:41,849 --> 00:18:49,419
streams because being a LAN well samba
流,因為作為一個局域網桑巴
372
00:18:49,619 --> 00:18:51,940
could we create the same stream object
我們可以創建相同的流物件嗎
373
00:18:52,140 --> 00:18:55,269
which is producer and by calling for
這是生產者,並呼籲
374
00:18:55,470 --> 00:18:58,059
each we are make if you like notified
我們每個人都可以,如果您喜歡通知
375
00:18:58,259 --> 00:18:59,950
the the streams that we this is a
我們這是一個流
376
00:19:00,150 --> 00:19:02,829
terminal operator and we wanna start
終端運營商,我們想開始
377
00:19:03,029 --> 00:19:06,669
consuming some data which it almost
消耗一些幾乎
378
00:19:06,869 --> 00:19:13,159
works like like in reactive streams so
就像在反應流中一樣
379
00:19:13,609 --> 00:19:16,539
content that fog that almost wrecked the
滿足,霧幾乎摧毀了
Wrecked:destroyed
380
00:19:16,740 --> 00:19:18,519
tractor streams is almost similar to
拖拉機流幾乎類似於
Tractor:software
381
00:19:18,720 --> 00:19:22,529
Java streams we can create some basic
Java流我們可以創建一些基本的
382
00:19:22,730 --> 00:19:25,750
comparison of object overheads that we
比較我們的物件開銷
383
00:19:25,950 --> 00:19:30,490
have seen on the might seen during those
在那些期間看到的力量
384
00:19:30,690 --> 00:19:32,819
those during the demo
演示期間的人
385
00:19:33,019 --> 00:19:36,669
so to summarize read two streams
所以總結一下閱讀兩個流
386
00:19:36,869 --> 00:19:39,399
creates one object one publisher at
在一個發佈者處創建一個物件
387
00:19:39,599 --> 00:19:42,730
assembly time then it creates two
組裝時間,然後創建兩個
388
00:19:42,930 --> 00:19:44,950
objects one subscriber and one
反對一個訂戶和一個
389
00:19:45,150 --> 00:19:47,259
subscription at subscription time
訂閱時訂閱
390
00:19:47,460 --> 00:19:51,609
because this is this contract is for is
因為這個合同是給的
391
00:19:51,809 --> 00:19:55,960
done for for for support in back
為獲得支持而做
392
00:19:56,160 --> 00:19:58,389
pressure and resilience in streaming so
流媒體的壓力和彈性
393
00:19:58,589 --> 00:20:00,859
we used subscription in order to expose
我們使用訂閱來公開
394
00:20:01,059 --> 00:20:04,430
how many elements we are we are ready ta
我們準備了多少元素
395
00:20:04,630 --> 00:20:07,730
consume and that's why we have to to
消費,這就是為什麼我們必須
396
00:20:07,930 --> 00:20:10,819
have all two objects in in this at this
在這裡有所有兩個對象
397
00:20:11,019 --> 00:20:13,430
stage and finally at runtime we can
階段,最後在運行時,我們可以
398
00:20:13,630 --> 00:20:16,940
produce basically an elements and the
基本上產生一個元素
399
00:20:17,140 --> 00:20:19,299
elements within the stream but this is
流中的元素,但這是
400
00:20:19,500 --> 00:20:22,399
actually the logical elements or evens
實際上是邏輯要素或偶數
401
00:20:22,599 --> 00:20:25,099
that we want to handle and process in
我們想要處理和處理的
402
00:20:25,299 --> 00:20:27,740
our stream in Jah stream we have
我們在賈哈流中有
403
00:20:27,940 --> 00:20:30,829
something similar so at the SATA assembly
SATA外觀類似的東西
SATA:硬體
404
00:20:31,029 --> 00:20:33,919
time we create a stream which which is
時候我們創建一個流
405
00:20:34,119 --> 00:20:36,230
basically a wrapper around array in our
基本上是我們陣列中的包裝器
406
00:20:36,430 --> 00:20:40,069
in our demo that that we have done just
在我們的演示中,我們剛剛完成了
407
00:20:40,269 --> 00:20:43,009
a couple of minutes ago and a
幾分鐘前和
408
00:20:43,210 --> 00:20:44,990
subscription time we provide an
訂閱時間我們提供
409
00:20:45,190 --> 00:20:48,829
implementation of terminal operator but
終端操作員的實現,但是
Implementation:start using
Terminal:the coding screen
Operator:working
410
00:20:49,029 --> 00:20:51,619
in contrast to reactive seams here we
與這裡的反應性接縫相反
411
00:20:51,819 --> 00:20:53,750
produce only one object because Java
只產生一個物件,因為Java
412
00:20:53,950 --> 00:20:57,440
streams is just push only models so we
流只是推模型,所以我們
413
00:20:57,640 --> 00:21:00,980
don't have to create subscription here
不必在這裡創建訂閱
414
00:21:01,180 --> 00:21:04,039
and we can just produce one terminal or
我們可以只生產一個終端或
415
00:21:04,240 --> 00:21:08,389
subscriber or operator that notify
通知的訂戶或運營商
416
00:21:08,589 --> 00:21:10,789
publisher or stream to the start sending
發佈者或流媒體開始發送
417
00:21:10,990 --> 00:21:13,909
data and at runtime face we have almost
資料,在運行時我們幾乎
418
00:21:14,109 --> 00:21:16,879
similar behavior we just send in data
我們只是發送資料而產生的類似行為
419
00:21:17,079 --> 00:21:19,250
through our pipeline and produce and
通過我們的管道,生產和
420
00:21:19,450 --> 00:21:24,289
elements through our stream however the
流中的元素,但是
421
00:21:24,490 --> 00:21:27,379
main difference between between Java
Java之間的主要區別
422
00:21:27,579 --> 00:21:29,659
streams and reactive streams and the
流和反應流以及
423
00:21:29,859 --> 00:21:33,589
main in order to show the main overhead
為了顯示主要開銷
424
00:21:33,789 --> 00:21:36,559
of all the streaming is by comparing
所有流媒體通過比較
425
00:21:36,759 --> 00:21:38,839
imperative streams or plain imperative
命令流或普通命令
426
00:21:39,039 --> 00:21:40,789
programming the plane for loops that we
對平面進行迴圈程式設計
427
00:21:40,990 --> 00:21:44,629
can write in order to iterate over
可以寫以便反覆運算
Iterate:to explain something
428
00:21:44,829 --> 00:21:47,659
the re and at that stage we don't have
稀土,在那個階段我們還沒有
429
00:21:47,859 --> 00:21:49,309
any assembling they don't have any
他們沒有任何組裝
430
00:21:49,509 --> 00:21:51,859
subscription we just processing data and
訂閱我們只是處理資料和
431
00:21:52,059 --> 00:21:54,919
the see that that's it and the overhead
看到的就是這樣和開銷
432
00:21:55,119 --> 00:21:57,349
is minimal and the overhead is just
是最小的,開銷只是
433
00:21:57,549 --> 00:21:59,149
element that we produce in and
我們在其中產生的元素
434
00:21:59,349 --> 00:22:01,789
processing during the iteration so
在反覆運算過程中進行處理
435
00:22:01,990 --> 00:22:05,210
accountants in fact we can do some basic
會計師實際上我們可以做一些基本的事情
436
00:22:05,410 --> 00:22:07,940
math in order to understand what
數學以瞭解什麼
437
00:22:08,140 --> 00:22:10,669
overhead we can can have
我們可以擁有的開銷
438
00:22:10,869 --> 00:22:13,338
in terms of produced produce it number
按生產數量計算
439
00:22:13,538 --> 00:22:16,188
object so faretta streams usually
物件如此法拉塔流通常
440
00:22:16,388 --> 00:22:19,909
creates and elements so analogical
創造和元素如此類比
Analogical:no numbers; opposite of digital
441
00:22:20,109 --> 00:22:22,058
elements that goes through the pipeline
流水線中的元素
442
00:22:22,259 --> 00:22:26,149
we create em operators which means we
我們創建em運算子,這意味著我們
443
00:22:26,349 --> 00:22:29,419
create em subscribers and subscriptions
創建em訂閱者和訂閱
444
00:22:29,619 --> 00:22:34,789
and in some in some cases we create some
在某些情況下,我們創建了一些
445
00:22:34,990 --> 00:22:37,369
additional so and I mean like we produce
另外,所以我的意思是像我們生產
446
00:22:37,569 --> 00:22:41,479
em up we produce em object operators
em up我們產生em物件運算子
447
00:22:41,679 --> 00:22:46,250
which is M publisher for each four for
每四個是M發佈者
448
00:22:46,450 --> 00:22:48,438
each operator we create in publisher and
我們在發佈商中創建的每個運營商,以及
449
00:22:48,638 --> 00:22:52,399
for each for each subscription stage we
對於每個訂閱階段的每個
Subscription: 訂閱
450
00:22:52,599 --> 00:22:55,879
provide a wrapper around ever around
提供包裝
451
00:22:56,079 --> 00:22:59,000
subscriber and in some cases we provide
訂戶,在某些情況下,我們提供
452
00:22:59,200 --> 00:23:01,639
an additional subscriptions so let me
額外的訂閱,讓我
453
00:23:01,839 --> 00:23:04,068
show you how it works under the hood in
告訴你它是如何在引擎蓋下工作的
454
00:23:04,269 --> 00:23:07,969
order to explain what is why we have
為了解釋為什麼我們有
455
00:23:08,169 --> 00:23:11,598
that much objects during the buildin
建造期間有那麼多物體
456
00:23:11,798 --> 00:23:14,149
reactive pipeline so if you're going to
反應性管道,所以如果您要
457
00:23:14,349 --> 00:23:19,149
to look at this plain stream everywhere
到處看看這條平淡的溪流
458
00:23:19,349 --> 00:23:22,818
put this here and let's just write a few
放在這裡,讓我們寫一些
459
00:23:23,019 --> 00:23:27,379
mappers we is function identity and for
映射器,我們是函數身份,並且
Mappers:talking about realtionships
460
00:23:27,579 --> 00:23:29,358
example Fiona knife
例如菲奧娜刀
461
00:23:29,558 --> 00:23:35,240
filters like that from the first glance
乍一看像這樣的篩檢程式
462
00:23:35,440 --> 00:23:39,678
it seems that on this you don't have any
似乎在此您沒有任何
463
00:23:39,878 --> 00:23:43,219
overhead so far but if it take a look on
到目前為止的開銷,但如果要看一下
464
00:23:43,419 --> 00:23:44,959
what is going on under the hood we will
我們將在引擎蓋下發生什麼
465
00:23:45,159 --> 00:23:48,229
see that each publisher each current
看到每個發佈者每個最新
466
00:23:48,429 --> 00:23:51,318
publisher on every map call on every
發佈商在每個地圖上的每個調用
467
00:23:51,519 --> 00:23:54,078
filter call call on every operator call
在每個操作員呼叫上過濾呼叫
468
00:23:54,278 --> 00:23:58,369
drops using another operator so
使用另一個運算子刪除
469
00:23:58,569 --> 00:23:59,869
basically what is going on we are
基本上發生了什麼事
470
00:24:00,069 --> 00:24:02,869
producing the objects chain which
生產物件鏈
471
00:24:03,069 --> 00:24:05,509
delegates all the invocation of all
委託所有的調用
Delegates(V):to give job to other computers
472
00:24:05,710 --> 00:24:09,048
methods the same behave for for chaining
用於連結的相同方法
473
00:24:09,249 --> 00:24:11,269
our subscribers so we receive the
我們的訂戶,因此我們收到
474
00:24:11,470 --> 00:24:13,789
subscriber and you rub this subscriber
訂閱者,您可以摩擦此訂閱者
475
00:24:13,990 --> 00:24:16,848
into another into another business logic
融入另一個業務邏輯
476
00:24:17,048 --> 00:24:20,328
or into map subscriber in this case we
或在這種情況下進入地圖訂戶
477
00:24:20,528 --> 00:24:23,299
have some optimization of course in in
當然有一些優化
478
00:24:23,500 --> 00:24:24,190
reactive 3
反應性3
479
00:24:24,390 --> 00:24:26,980
and from time to time plane operators
以及不時的飛機運營商
480
00:24:27,180 --> 00:24:30,069
includes and combines at the same time a
同時包含和合併一個
481
00:24:30,269 --> 00:24:34,359
consumer or or subscriber logic and
消費者或訂閱者邏輯,以及
482
00:24:34,559 --> 00:24:36,669
producer or subscription logic and in
生產者或訂閱邏輯以及
483
00:24:36,869 --> 00:24:39,279
that way we reduce the number of created
這樣我們減少了創建的數量
484
00:24:39,480 --> 00:24:42,460
or and producing objects but when we do
或生成物件,但是當我們這樣做時
485
00:24:42,660 --> 00:24:45,129
some multi-threading data processing
一些多執行緒資料處理
486
00:24:45,329 --> 00:24:48,639
like we are sending data through publish
就像我們通過發佈發送資料一樣
487
00:24:48,839 --> 00:24:51,579
on or similar similar operators in this
或與此類似的類似運算子
488
00:24:51,779 --> 00:24:53,349
in this case as we can create some
在這種情況下,我們可以創建一些
489
00:24:53,549 --> 00:24:55,509
additional subscribers and some
其他訂戶和一些
490
00:24:55,710 --> 00:24:57,450
additional subscriptions which produce
產生額外訂閱
491
00:24:57,650 --> 00:25:00,700
one more which produce one more objects
一個又一個產生另一個物體
492
00:25:00,900 --> 00:25:05,250
object to you to the garbage collector
反對您到垃圾收集器
493
00:25:05,450 --> 00:25:08,680
in contrast Java streams is a little bit
相反,Java流有點
494
00:25:08,880 --> 00:25:12,339
simpler so on average we just create an
比較簡單,因此平均而言,我們只需創建一個
495
00:25:12,539 --> 00:25:15,789
element during runtime and produce one
元素在運行時產生一個
496
00:25:15,990 --> 00:25:18,159
one more wrapper for every operator
每個操作員再包裝一個
497
00:25:18,359 --> 00:25:23,019
because Java streams almost design it in
因為Java流幾乎在其中進行設計
498
00:25:23,220 --> 00:25:25,569
the same way or reactive streams design
以相同的方式或反應流設計
499
00:25:25,769 --> 00:25:27,789
it in the same vein way as Java streams
它與Java流的方式相同
500
00:25:27,990 --> 00:25:31,259
so their overhead are pretty similar
所以他們的開銷非常相似
501
00:25:31,460 --> 00:25:35,049
finally for imperative data processing
最後用於命令式資料處理
502
00:25:35,250 --> 00:25:37,119
we just create only n elements and
我們只創建n個元素,
503
00:25:37,319 --> 00:25:39,609
that's it and we reduce the number of
就是這樣,我們減少了
504
00:25:39,809 --> 00:25:42,369
producing objects for you can imagine
為您想像的物體
505
00:25:42,569 --> 00:25:44,919
how many operators you are using in your
您正在使用多少個運算子
506
00:25:45,119 --> 00:25:47,319
in your reactive application at
在您的反應性應用程式中
507
00:25:47,519 --> 00:25:50,169
production and you can reduce by using
生產,您可以通過減少使用
508
00:25:50,369 --> 00:25:53,289
the plain imperative programming you can
您可以進行簡單的命令式程式設計
509
00:25:53,490 --> 00:25:56,190
reduce the number of created objects a
減少創建對象的數量
510
00:25:56,390 --> 00:26:02,950
little bit of course so after this with
當然,所以在此之後
511
00:26:03,150 --> 00:26:05,559
this intro to what is going on inside
這個介紹裡面發生了什麼
512
00:26:05,759 --> 00:26:09,539
reactive streams we have to ask yourself
反應流我們必須問自己
513
00:26:09,740 --> 00:26:13,119
where this object overhead imparts
該物件開銷產生的地方
514
00:26:13,319 --> 00:26:15,069
performance and why should we care about
性能以及我們為什麼要關心
515
00:26:15,269 --> 00:26:18,940
how many objects we produce to to in our
我們生產到多少物體
516
00:26:19,140 --> 00:26:23,289
in our application so usually when we
通常在我們的應用程式中
517
00:26:23,490 --> 00:26:26,169
build plain spring applications when we
當我們建立簡單的spring應用程式時
518
00:26:26,369 --> 00:26:28,930
do when we create a plain crud
當我們創建一個簡單的結局時要做
Crud:very bad(口語)
519
00:26:29,130 --> 00:26:32,409
application B I usually write something
應用程式BI通常會寫一些東西
520
00:26:32,609 --> 00:26:35,889
like that so we create a plane for
這樣,我們為
521
00:26:36,089 --> 00:26:37,930
example post math and that a SAP
示例後數學和一個SAP
522
00:26:38,130 --> 00:26:40,389
one one object a synchronous in that
一個物件在其中同步
523
00:26:40,589 --> 00:26:42,250
case so we receive Mona
案例,所以我們收到蒙娜麗莎
524
00:26:42,450 --> 00:26:46,079
for example of some order and after some
例如一些命令和一些之後
525
00:26:46,279 --> 00:26:48,519
protests and we returned that Mona
抗議,我們返回了蒙娜麗莎
526
00:26:48,720 --> 00:26:52,779
however we since we like general idea of
但是我們既然喜歡
527
00:26:52,980 --> 00:26:54,940
reactive programming which means some
反應式程式設計,這意味著一些
528
00:26:55,140 --> 00:26:58,569
functional piping where we can where we
功能性管道我們可以在哪裡
529
00:26:58,769 --> 00:27:01,719
can separate all all the stages of data
可以分離所有資料階段
530
00:27:01,919 --> 00:27:03,879
processing on the separate on the
分開處理
531
00:27:04,079 --> 00:27:07,088
separate maps maps for example we can
單獨的地圖,例如我們可以
532
00:27:07,288 --> 00:27:11,079
write something like that and you should
寫這樣的東西,你應該
533
00:27:11,279 --> 00:27:14,259
wonder why should we care what how can
想知道為什麼我們應該關心如何
534
00:27:14,460 --> 00:27:16,598
this code impact the performance however
該代碼會影響性能
535
00:27:16,798 --> 00:27:20,680
if you murder that plain application you
如果您謀殺了那個簡單的應用程式,那麼您
536
00:27:20,880 --> 00:27:23,950
will get for example something like
例如會得到類似
537
00:27:24,150 --> 00:27:27,819
those benchmarks so in that case let me
這些基準,所以在那種情況下讓我
Benchmarks:base/it test for some coding
538
00:27:28,019 --> 00:27:30,358
explain shortly what is going on here
簡短地解釋這裡發生了什麼
539
00:27:30,558 --> 00:27:33,848
currently I'm showing you a J image Java
目前,我正在向您展示J圖像Java
540
00:27:34,048 --> 00:27:38,129
linker benchmark of imperative
命令連結基準
Linker:two hold together
Imperative:need to/ must do
541
00:27:38,329 --> 00:27:41,619
imperative code that doing the same the
命令式的代碼也一樣
542
00:27:41,819 --> 00:27:44,319
same business logic as you have seen on
與您看到的相同的業務邏輯
543
00:27:44,519 --> 00:27:45,279
this slide
這張幻燈片
544
00:27:45,480 --> 00:27:50,169
not this slide but this exactly the same
不是這張幻燈片,而是完全一樣的
545
00:27:50,369 --> 00:27:52,869
execution of exactly the same methods
執行完全相同的方法
546
00:27:53,069 --> 00:27:57,669
like here versus this code that you have
像這裡與您擁有的這段代碼
547
00:27:57,869 --> 00:28:00,848
seen just a moment ago versus the stream
剛剛在流中看到
Versus(副詞):to compare two things by fighting
548
00:28:01,048 --> 00:28:03,399
of in this case of two elements because
在這種情況下有兩個元素,因為
549
00:28:03,599 --> 00:28:05,950
I had to to create a stream of two
我必須創建兩個流
550
00:28:06,150 --> 00:28:07,809
elements in order to show you a
元素以向您展示
551
00:28:08,009 --> 00:28:11,049
performant impact and if you do some
績效影響,如果您做了一些
552
00:28:11,250 --> 00:28:14,259
basic math if we compare the performance
基本數學,如果我們比較性能
553
00:28:14,460 --> 00:28:18,430
of two of those of those programs we
這些程式中的兩個
554
00:28:18,630 --> 00:28:21,419
will see that overhead of reactive
會看到反應性的開銷
555
00:28:21,619 --> 00:28:25,869
pipeline is about 15% versus in plain
與普通管道相比,管道大約占15%
556
00:28:26,069 --> 00:28:29,289
imperative program is the same identical
命令式程式是相同的
557
00:28:29,490 --> 00:28:31,419
business logic so now you should think
業務邏輯,所以現在您應該考慮
558
00:28:31,619 --> 00:28:35,079
whether I have to write that much
我是否必須寫那麼多
559
00:28:35,279 --> 00:28:39,279
reactive operators in my pipeline have
我的管道中的反應堆操作員有
560
00:28:39,480 --> 00:28:44,469
other sometimes like this is an example
其他有時像這樣的例子
561
00:28:44,669 --> 00:28:47,950
of just two element stream Webber in
Webber中只有兩個元素流
562
00:28:48,150 --> 00:28:51,069
other in reality we have a pipelines of
在現實中,我們有
563
00:28:51,269 --> 00:28:51,549
long
長
564
00:28:51,750 --> 00:28:54,069
in streams for example from time to time
例如在流中
565
00:28:54,269 --> 00:28:56,740
from time to time we can protest ten
我們不時可以抗議十
566
00:28:56,940 --> 00:29:01,180
elements or even 100 elements and for
元素甚至100個元素,並且
567
00:29:01,380 --> 00:29:04,269
example for ten elements pipeline we
十元素流水線的例子
568
00:29:04,470 --> 00:29:06,460
have only six percent overhead which is
只有百分之六的開銷
569
00:29:06,660 --> 00:29:10,269
better and if we have really long drawn
更好,如果我們真的很久了
570
00:29:10,470 --> 00:29:12,460
in stream for example I need a
例如在流中,我需要一個
571
00:29:12,660 --> 00:29:14,470
performance measurement of the same
相同的性能測量
572
00:29:14,670 --> 00:29:17,470
pipeline of maps versus the same
地圖管線與相同
573
00:29:17,670 --> 00:29:19,480
business logic written in imperative
勢在必行的業務邏輯
574
00:29:19,680 --> 00:29:24,669
style but true but but in that case the
風格,但真實,但在那種情況下
575
00:29:24,869 --> 00:29:28,839
business logic were processing the
業務邏輯正在處理
576
00:29:29,039 --> 00:29:30,879
business logic was protesting 1 million
業務邏輯抗議100萬
577
00:29:31,079 --> 00:29:34,169
elements and by measuring these
元素並通過測量這些
578
00:29:34,369 --> 00:29:37,269
applications we will get around we will
我們將解決的應用程式
579
00:29:37,470 --> 00:29:39,609
get only 3 percent of overhead which
僅獲得3%的間接費用
580
00:29:39,809 --> 00:29:43,839
means the more elements we have in our
意味著我們擁有更多的元素
581
00:29:44,039 --> 00:29:48,940
pipeline the more the the more long run
流水線越多,執行時間越長
582
00:29:49,140 --> 00:29:52,889
in our pipeline is the last overhead we
我們管道中的最後一筆開銷是
583
00:29:53,089 --> 00:29:58,169
we get during the processing of of our
我們在處理我們的過程中得到
584
00:29:58,369 --> 00:30:00,309
during the business logic in our
在我們的業務邏輯中
585
00:30:00,509 --> 00:30:03,299
application which means heaven only
僅意味著天堂的應用
586
00:30:03,500 --> 00:30:07,180
heaven only one or plane crude oil
天堂只有一種或飛機原油
587
00:30:07,380 --> 00:30:10,599
application which handles element which
處理元素的應用程式
588
00:30:10,799 --> 00:30:13,869
handles 101 post requests using magic and
使用魔法處理101個帖子請求
589
00:30:14,069 --> 00:30:16,359
respond to using mono can impact your
回應使用單聲道可能會影響您
Mono:one ear
590
00:30:16,559 --> 00:30:21,639
performance a lot around 15% and in case
表現大約15%,以防萬一
591
00:30:21,839 --> 00:30:23,500
you're right in real streaming
你是真正的流媒體
592
00:30:23,700 --> 00:30:27,899
application real fast long running pipes
應用程式真正快速,長期運行的管道
593
00:30:28,099 --> 00:30:31,269
which doesn't create on every request a
並非在每個請求上都創建一個
594
00:30:31,470 --> 00:30:33,460
new stream in that case you will get
在這種情況下,您將獲得新的流
595
00:30:33,660 --> 00:30:37,119
around 3% overhead all right
大約3%的開銷
596
00:30:37,319 --> 00:30:41,349
however if we write if we create if we
但是如果我們寫,如果我們創建,如果我們
597
00:30:41,549 --> 00:30:44,649
put up all those measurements on
將所有這些測量值放在
598
00:30:44,849 --> 00:30:48,629
the on the plot we will see some
在情節上,我們將看到一些
Plot:趨勢線的點
599
00:30:48,829 --> 00:30:51,629
dependency between the data and
數據與
Dependency:you need something every date
600
00:30:51,829 --> 00:30:55,019
of course if we produce provide some or
當然如果我們生產提供一些或
601
00:30:55,220 --> 00:30:58,119
continue monitoring continue measure
繼續監測,繼續衡量
602
00:30:58,319 --> 00:31:00,579
doing some measurements with reactive
用電抗做一些測量
603
00:31:00,779 --> 00:31:03,460
pipelines and imperative pipelines for
的管道和命令式管道
604
00:31:03,660 --> 00:31:05,559
reactive pipelines we will see
反應性管道,我們將看到
605
00:31:05,759 --> 00:31:09,399
that it's for the short number of
這是為數不多的
606
00:31:09,599 --> 00:31:12,519
elements or for just a few numbers few
元素或僅少數幾個
607
00:31:12,720 --> 00:31:14,799
numbers of elements in the stream we
流中元素的數量
608
00:31:15,000 --> 00:31:16,839
will have a really huge overhead but
會有很大的開銷,但是
609
00:31:17,039 --> 00:31:19,259
once we get more and more elements
一旦我們得到越來越多的元素
610
00:31:19,460 --> 00:31:23,349
within one stream you'll approximately
在一個流中,您大約
Approximately: 大約
611
00:31:23,549 --> 00:31:27,639
goes to to some trend and to some basic
走向某種趨勢和一些基本
612
00:31:27,839 --> 00:31:31,240
overhead for for streaming for example
例如資料流的開銷
613
00:31:31,440 --> 00:31:33,639
in that case is overhead will be 4 4
在這種情況下,開銷將是4 4
614
00:31:33,839 --> 00:31:37,619
maps will be around 2 or 3 percent and
地圖將約為2%或3%,
615
00:31:37,819 --> 00:31:42,069
now you should wonder what else causes
現在你應該懷疑還有什麼原因
616
00:31:42,269 --> 00:31:45,480
those overhead because in caso 10
這些開銷是因為在caso 10中
617
00:31:45,680 --> 00:31:48,339
millions of elements within the stream
流中數百萬個元素
618
00:31:48,539 --> 00:31:50,680
our stream will be really long-lived
我們的流將是長壽的
619
00:31:50,880 --> 00:31:54,579
and garbage collector won't do any
和垃圾收集器不會做任何事情
620
00:31:54,779 --> 00:31:58,200
additional additional work for for
的其他額外工作
621
00:31:58,400 --> 00:32:01,980
creating and allocating and deallocating
創建,分配和取消分配
622
00:32:02,180 --> 00:32:05,349
the publisher and subscriber and all
發佈者和訂閱者以及所有
623
00:32:05,549 --> 00:32:09,339
real all reactive all related elements
真實所有反應性所有相關元素
624
00:32:09,539 --> 00:32:11,919
to react to streams so what else can
對流做出反應,還有什麼可以
625
00:32:12,119 --> 00:32:14,889
cause the this overhead for reactive
造成這種反應性的開銷
626
00:32:15,089 --> 00:32:18,039
pipelines in order to understand that we
管道,以瞭解我們
627
00:32:18,240 --> 00:32:21,389
have to to go deeper and we have to
必須更深入,我們必須
628
00:32:21,589 --> 00:32:23,440
understand what is going on within
瞭解內在發生了什麼
629
00:32:23,640 --> 00:32:25,180
runtime face
運行時臉
630
00:32:25,380 --> 00:32:28,450
so basically when we build a pipeline we
所以基本上當我們建立管道時
631
00:32:28,650 --> 00:32:30,519
produce a few objects like from our a
產生一些像從我們的
632
00:32:30,720 --> 00:32:33,879
map map subscribe and adjust this stage
地圖地圖訂閱並調整此階段
633
00:32:34,079 --> 00:32:36,490
when we start saying in data we will
當我們開始在資料中說時,我們將
634
00:32:36,690 --> 00:32:38,529
have something like this we will have
有這樣的事情,我們將有
635
00:32:38,730 --> 00:32:42,279
basically invocation of first map and we
基本上是調用第一個地圖,我們
636
00:32:42,480 --> 00:32:44,889
will have some sand in of circles after
之後會有一些沙子
637
00:32:45,089 --> 00:32:47,799
this in order to apply my pain we will
為了減輕我的痛苦,我們將
638
00:32:48,000 --> 00:32:50,829
have to you to apply function provided
必須您應用所提供的功能
639
00:32:51,029 --> 00:32:54,399
to you to our publisher so we actually
給你給我們的出版商,所以我們實際上
640
00:32:54,599 --> 00:32:57,639
apply business logic by martin by map in
通過地圖在馬丁中應用業務邏輯
641
00:32:57,839 --> 00:33:00,339
one element to another and after all we
一個元素到另一個元素,畢竟我們
642
00:33:00,539 --> 00:33:02,259
will call another subscriber which is
將呼叫另一個訂戶
643
00:33:02,460 --> 00:33:05,619
downstream subscriber by calling on next
通過呼叫下一個下游訂戶
Downstream:start from the mountain(coder) down to the user
Upstream:the user to the coder
644
00:33:05,819 --> 00:33:08,109
masterpiece choir after some mapping and
一些映射後的傑作合唱團和
Masterpiece:something is perfect
645
00:33:08,309 --> 00:33:11,049
after all we will call another on next
畢竟我們接下來會打電話給另一個人
646
00:33:11,250 --> 00:33:13,329
after mapping and so forth and so on so
映射之後等等,依此類推
647
00:33:13,529 --> 00:33:15,839
basically what is what is happening is
基本上發生了什麼
648
00:33:16,039 --> 00:33:18,490
chaining of masses
群眾鏈
chaining of masses=to put something together
649
00:33:18,690 --> 00:33:20,470
because as you can remember from from
因為您可以從中記住
650
00:33:20,670 --> 00:33:24,119
previous part is ever that we have
前一部分是我們擁有的
651
00:33:24,319 --> 00:33:28,000
basically a chain of of responsibility
基本上是責任鏈
652
00:33:28,200 --> 00:33:30,519
within overactive streams so basically
在過度活躍的流中,所以基本上
653
00:33:30,720 --> 00:33:32,289
in order to you for example request
為了您的要求
654
00:33:32,490 --> 00:33:34,829
elements we will have to cook to cut
我們必須煮的元素
655
00:33:35,029 --> 00:33:37,419
every subscription and request n
每個訂閱和請求n
656
00:33:37,619 --> 00:33:40,389
elements on average through every rapper
每個說唱歌手的平均元素
657
00:33:40,589 --> 00:33:44,559
until we get T to final publisher and
直到我們將T交給最終發佈者為止,
658
00:33:44,759 --> 00:33:47,440
publisher will call on next method on
發佈者將在上調用下一個方法
659
00:33:47,640 --> 00:33:49,980
our subscriber ease the element and
我們的訂戶簡化了元素,
660
00:33:50,180 --> 00:33:52,480
after all what we will have we will have
畢竟我們將擁有我們將擁有
661
00:33:52,680 --> 00:33:55,269
another chain of invocation which will
另一個調用鏈
Invocation:to call something out
662
00:33:55,470 --> 00:33:57,970
be invocation of next method through all
全部調用下一個方法
663
00:33:58,170 --> 00:34:00,730
available or chain and subscribers
可用或連鎖和訂戶
664
00:34:00,930 --> 00:34:03,700
within our pipeline until we get again
在我們的管道中,直到我們再次得到
665
00:34:03,900 --> 00:34:05,829
to request method and we will get the
請求方法,我們將獲得
666
00:34:06,029 --> 00:34:08,350
same picture as before and so for and so
與以前一樣的照片等等
667
00:34:08,550 --> 00:34:12,010
on until we produced all the data so
直到我們生成所有資料為止
668
00:34:12,210 --> 00:34:15,010
basically let me quickly show you what
基本上讓我快速向您展示
669
00:34:15,210 --> 00:34:22,300
is going on here so as I said here we
就像我在這裡說的那樣
670
00:34:22,500 --> 00:34:27,000
have some basic our basic PI point and
有一些基本的基本PI點
671
00:34:27,199 --> 00:34:32,200
if we let me go quickly to our lambda
如果我們讓我快速進入lambda
672
00:34:32,400 --> 00:34:35,260
subscriber and put a breakpoint here and
訂戶並在此處放置一個中斷點,然後
Breakpoint:one point to make something to break
673
00:34:35,460 --> 00:34:41,560
write our stream and yeah here we go we
寫我們的流,是的,我們走了
674
00:34:41,760 --> 00:34:44,470
subscribe to our stream now we are going
訂閱我們的流,現在我們要
675
00:34:44,670 --> 00:34:47,620
to the chain of our subscriptions so
到我們的訂閱鏈
676
00:34:47,820 --> 00:34:50,320
this is the bottom of execution this is
這是執行的底部,這是
677
00:34:50,519 --> 00:34:52,870
just the first unsubscribe goal and
只是第一個退訂目標,
678
00:34:53,070 --> 00:34:55,539
after all we are going to another
畢竟我們要去另一個
679
00:34:55,739 --> 00:34:58,780
subscription which is flux filter which
訂閱是通量篩檢程式
680
00:34:58,980 --> 00:35:01,900
just bypass this request method to
只是繞過這個請求方法
681
00:35:02,099 --> 00:35:05,110
upstream and the same format and the
上游格式相同
682
00:35:05,309 --> 00:35:06,910
same from another map and the same for
在另一張地圖上也一樣
683
00:35:07,110 --> 00:35:09,070
another map and the same for another map
另一張地圖和另一張地圖相同
684
00:35:09,269 --> 00:35:11,760
and another until we get to our
直到我們到達我們的
685
00:35:11,960 --> 00:35:15,310
publisher or actual source of data which
發佈者或實際資料來源
686
00:35:15,510 --> 00:35:18,519
starts and and data and basically this
開始和資料,基本上這
687
00:35:18,719 --> 00:35:22,240
this data sending just ended up with we
這些資料發送最終以我們
688
00:35:22,440 --> 00:35:26,830
is plane on next invocation which looks
在下一次調用時看起來像飛機
689
00:35:27,030 --> 00:35:31,010
like that so let me
這樣,讓我
690
00:35:31,210 --> 00:35:35,210
yeah let me do that yeah here we go here
是的,讓我做到這一點,是的,我們去這裡
691
00:35:35,409 --> 00:35:38,030
we got the first element and here we
我們得到了第一個元素,在這裡我們
692
00:35:38,230 --> 00:35:40,580
start traversing through the business
開始遍歷業務
693
00:35:40,780 --> 00:35:43,280
logic since we here the mapper the
邏輯,因為我們在這裡映射器
694
00:35:43,480 --> 00:35:46,130
mapper is just an identity function so
映射器只是一個身份函數,所以
695
00:35:46,329 --> 00:35:49,760
we don't have so we don't have anything
我們沒有,所以我們什麼都沒有
696
00:35:49,960 --> 00:35:52,970
to do we just execute that function and
要執行該功能,
Execute:start to make something happen
697
00:35:53,170 --> 00:35:53,510
that's it
而已
698
00:35:53,710 --> 00:35:56,200
then we are going to call another mapper
然後我們要呼叫另一個映射器
699
00:35:56,400 --> 00:35:59,539
through on next and another mapper from
通過下一個和另一個映射器
700
00:35:59,739 --> 00:36:04,090
next and another mapper until we get to
下一個和另一個映射器,直到我們到達
701
00:36:04,289 --> 00:36:08,990
the our filter QB in the filter since
我們在篩檢程式中的篩檢程式品質檢查自
702
00:36:09,190 --> 00:36:11,990
our predicate is always true invocation
我們的謂詞始終是真實的調用
Predicate:語法=-ing
703
00:36:12,190 --> 00:36:15,620
we just receive true we call another
我們只是收到真實的我們叫另一個
704
00:36:15,820 --> 00:36:17,120
unknown next message
未知的下一封郵件
705
00:36:17,320 --> 00:36:20,870
we'll end up with our consumer actual
我們將最終得到我們的消費者
706
00:36:21,070 --> 00:36:24,830
consumer so this demo just basically
消費者,所以這個演示基本上
707
00:36:25,030 --> 00:36:27,919
shows what is going on inside under the
展示了裡面發生了什麼
708
00:36:28,119 --> 00:36:30,260
hood at the runtime and what is going on
運行時的引擎蓋以及正在發生的事情
hood引擎蓋 /fuselage 機車的機車
Runtime:how long to the something for
709
00:36:30,460 --> 00:36:33,050
is just basically sending the element
基本上只是發送元素
710
00:36:33,250 --> 00:36:37,159
through the pipeline of objects of
通過對象的管道
711
00:36:37,358 --> 00:36:39,740
subscribers we just delegate their
訂戶,我們只是委託他們
712
00:36:39,940 --> 00:36:42,139
invocation to another subscriber to
調用另一個訂戶
713
00:36:42,338 --> 00:36:43,940
another subscriber to another subscriber
另一個訂戶到另一個訂戶
714
00:36:44,139 --> 00:36:46,720
until we get the final end point and
直到我們得到最終的終點
715
00:36:46,920 --> 00:36:50,320
that's basically it during the whole
基本上就是整個
716
00:36:50,519 --> 00:36:54,830
data center nothing complex but as you
資料中心沒什麼複雜的
717
00:36:55,030 --> 00:36:57,169
can see basically what we have here is
基本上可以看到我們在這裡
718
00:36:57,369 --> 00:37:00,649
just method invocation so let's back T
只是方法調用,所以讓我們返回T
719
00:37:00,849 --> 00:37:06,500
to our slides and let's just talk again
到我們的幻燈片,讓我們再說一遍
720
00:37:06,699 --> 00:37:10,730
about overhead and in that case masses
關於開銷,在那種情況下
721
00:37:10,929 --> 00:37:15,889
call overhead as you can know one of the
您可以瞭解其中之一
722
00:37:16,088 --> 00:37:20,240
expensive operate operation in in in
費用昂貴
723
00:37:20,440 --> 00:37:23,899
Java is an imp agreement in general is
Java是Imp協議,一般來說是
724
00:37:24,099 --> 00:37:26,990
method invocation and maybe heard
方法調用,也許聽到了
725
00:37:27,190 --> 00:37:29,240
something about in line and we're at
關於排隊的事情,我們在
726
00:37:29,440 --> 00:37:31,840
runtime for example in java decompiler
運行時,例如在Java反編譯器中
Decompiler:排序不整齊
de=not
727
00:37:32,039 --> 00:37:34,820
try tries to inline some method
嘗試內聯一些方法
728
00:37:35,019 --> 00:37:37,280
invocation in order to reduce the
調用以減少
729
00:37:37,480 --> 00:37:40,280
overhead that we get by calling the
我們通過調用
730
00:37:40,480 --> 00:37:41,060
methods
方法
731
00:37:41,260 --> 00:37:43,930
so in general to summarize what
所以總的來說總結一下
732
00:37:44,130 --> 00:37:46,850
overhead-cam squeeze with the stream in
高架攝像頭擠壓流中
overhead-cam= overhead-camera
squeeze: push something together
733
00:37:47,050 --> 00:37:49,730
parody corrective streams we have in
我們擁有的模仿糾正流
734
00:37:49,929 --> 00:37:53,510
general and massive as mm on next method
在下一個方法上一般且品質為mm
735
00:37:53,710 --> 00:37:56,000
invocation on our subscriber because
調用我們的訂戶,因為
736
00:37:56,199 --> 00:38:00,440
we're amp means the number or equals to
我們是amp表示數字等於
737
00:38:00,639 --> 00:38:03,650
the number of produces operators in our
我們生產經營者的數量
738
00:38:03,849 --> 00:38:07,400
app in our pipeline internally have an
我們管道中的應用內部有一個
739
00:38:07,599 --> 00:38:10,100
invocation of real function which means
調用實函數,這意味著
740
00:38:10,300 --> 00:38:13,220
invocation of real business logic and we
調用真實的業務邏輯,我們
741
00:38:13,420 --> 00:38:16,730
have M invocation of request method
具有請求方法的M調用
742
00:38:16,929 --> 00:38:21,320
method because M could be only one
方法,因為M可能只有一個
743
00:38:21,519 --> 00:38:23,390
invocation and the very beginning will
調用和一開始的意願
744
00:38:23,590 --> 00:38:26,690
be very just success okay give me all
非常成功就可以了
745
00:38:26,889 --> 00:38:29,840
you have by sending one max value or we
您可以發送一個最大值,或者我們
746
00:38:30,039 --> 00:38:35,750
can send request 1 1 1 1 1 on every
可以在每個發送請求1 1 1 1 1
747
00:38:35,949 --> 00:38:37,909
element we received so in that way we
我們收到的元素,這樣我們
748
00:38:38,108 --> 00:38:42,680
can just we can just have pool playing
我們可以玩檯球嗎
749
00:38:42,880 --> 00:38:47,269
pool model but these reactive streams so
池模型,但是這些反應流
750
00:38:47,469 --> 00:38:49,789
it depends in many in many cases we are
在許多情況下,這取決於我們
751
00:38:49,989 --> 00:38:51,830
going to take to look at those cases a
要看那些情況
752
00:38:52,030 --> 00:38:52,909
little bit later
稍後
753
00:38:53,108 --> 00:38:55,130
but in general we have some overhead in
但總的來說,我們在
754
00:38:55,329 --> 00:38:58,600
method invocation in interactive streams
互動式流中的方法調用
755
00:38:58,800 --> 00:39:02,750
comparing to you to Java streams Java
與Java流進行比較
756
00:39:02,949 --> 00:39:06,019
streams has only two two basic
流只有兩個兩個基本
757
00:39:06,219 --> 00:39:08,510
indications which means sing invocation
表示需要調用的指示
758
00:39:08,710 --> 00:39:10,780
or calling cinq a Sept method for
或將cinq稱為Sept方法
759
00:39:10,980 --> 00:39:12,710
element it could be a little bit
元素可能會有點
760
00:39:12,909 --> 00:39:15,680
different so it could it can depend on
不同,所以它可以取決於
761
00:39:15,880 --> 00:39:19,280
some some operators within within Java
Java中的一些運算子
762
00:39:19,480 --> 00:39:21,230
strings but basically in just one
字串,但基本上只有一個
763
00:39:21,429 --> 00:39:24,650
invocation on just an invocation for
調用僅用於
764
00:39:24,849 --> 00:39:29,090
every element on the on the consumer
消費者的每一個要素
765
00:39:29,289 --> 00:39:32,060
data consumer we is an invocation of
資料使用者,我們是一個調用
766
00:39:32,260 --> 00:39:34,460
real business logic or real function
真實的業務邏輯或真實功能
767
00:39:34,659 --> 00:39:37,970
which does which does some business
哪個做些生意
768
00:39:38,170 --> 00:39:41,269
logic for you and finally comparative
邏輯,最後比較
769
00:39:41,469 --> 00:39:43,510
imperative programming we just have an
命令式程式設計我們只有一個
770
00:39:43,710 --> 00:39:47,870
invocation of real functions and as you
調用真實函數,並隨您
771
00:39:48,070 --> 00:39:50,320
can can understand
可以理解
772
00:39:50,519 --> 00:39:53,019
in that case where we have just plain
在那種情況下,我們只有
773
00:39:53,219 --> 00:39:57,090
method Colin the JIT can work well ver
方法Colin JIT可以很好地工作
774
00:39:57,289 --> 00:40:00,159
with Java streams and the reactive
與Java流和反應式
775
00:40:00,358 --> 00:40:02,680
streams in lining of all this Colin
在所有這些科林的襯裡裡流
776
00:40:02,880 --> 00:40:04,450
within the sink and within the
在水槽內和
777
00:40:04,650 --> 00:40:07,419
subscribers can can be a little bit
訂戶可以有點
778
00:40:07,619 --> 00:40:08,340
challenging
具有挑戰性的
779
00:40:08,539 --> 00:40:11,830
so to summarize in general for active
所以總結一下主動
780
00:40:12,030 --> 00:40:15,070
streams we have around 3x overhead in
流,我們的開銷約為3倍
3x=three times
781
00:40:15,269 --> 00:40:18,789
method invocation in general we have to
一般而言,方法調用
782
00:40:18,989 --> 00:40:20,980
produce far more instructions that for
產生更多的指令
783
00:40:21,179 --> 00:40:23,880
plain Traverse in others they over them
在其他人中橫行他們
Traverse:name
784
00:40:24,079 --> 00:40:27,310
in the for loop for example as you have
例如,在for迴圈中
785
00:40:27,510 --> 00:40:29,440
seen we have a lot of verification
看到我們有很多驗證
786
00:40:29,639 --> 00:40:32,139
inside inside a next method for mapper
在內部的下一個映射器方法
787
00:40:32,338 --> 00:40:36,130
inside inside the next method for filter
裡面裡面下一個過濾方法
788
00:40:36,329 --> 00:40:38,800
and I'm not talking about more complex
我不是說更複雜
789
00:40:39,000 --> 00:40:42,159
operator like flat map or or publish on
運算子,例如平面圖或發佈於
790
00:40:42,358 --> 00:40:46,659
and so for and so on and in general came
等等等等,一般來說
791
00:40:46,858 --> 00:40:49,630
in this party and having this chain of
在這個聚會上,並擁有
792
00:40:49,829 --> 00:40:52,419
responsibility of invocation of business
營業責任
793
00:40:52,619 --> 00:40:55,330
logic in a variety of pipeline we have
在各種管道中的邏輯
794
00:40:55,530 --> 00:40:58,330
less change chance T to get the proper
更少的改變機會T以得到適當的
795
00:40:58,530 --> 00:41:02,440
in line in a trot and Tron time by G
在小跑和Tron時間中符合G
796
00:41:02,639 --> 00:41:05,639
compiler just-in-time time compiler and
編譯器即時編譯器和
797
00:41:05,838 --> 00:41:09,610
which means that here we have we can
這意味著在這裡我們可以
798
00:41:09,809 --> 00:41:12,310
have this three percent overhead for
有這百分之三的開銷
799
00:41:12,510 --> 00:41:15,700
example for only four mappers or we can
僅用於四個映射器的示例,否則我們可以
800
00:41:15,900 --> 00:41:19,210
have even more runtime overhead for or
甚至有更多的運行時開銷
801
00:41:19,409 --> 00:41:24,130
invocation overhead when we have far for
當我們有遠的時候調用開銷
802
00:41:24,329 --> 00:41:26,380
more operator in our pipeline when we
當我們在管道中有更多的運營商
803
00:41:26,579 --> 00:41:29,230
can be when we are doing a real business
可能是當我們做真實的生意時
804
00:41:29,429 --> 00:41:33,010
logic potassium so to show you the
邏輯鉀所以給你看
805
00:41:33,210 --> 00:41:36,810
possible overhead then that you can can
可能的開銷,那麼你可以
806
00:41:37,010 --> 00:41:42,250
have and that overhead that comes in
有,而來的開銷
807
00:41:42,449 --> 00:41:48,039
this example is basically based on the
這個例子基本上是基於
808
00:41:48,239 --> 00:41:51,190
invocation and yeah basically on some
調用,是的,基本上
809
00:41:51,389 --> 00:41:54,130
invocations of free active streams and
免費活動流的調用和
810
00:41:54,329 --> 00:41:56,710
basically on some additional operators
基本上是一些額外的運營商
811
00:41:56,909 --> 00:42:00,490
of course we when we write a lot of
當然,當我們寫很多
812
00:42:00,690 --> 00:42:03,930
operators the runtime will be
操作員運行時將是
813
00:42:04,130 --> 00:42:07,060
much more complex than in plain
比平原要複雜得多
814
00:42:07,260 --> 00:42:10,030
imperative programming however the plain
命令式程式設計,但是簡單
815
00:42:10,230 --> 00:42:13,150
runtime like playing series of maps and
運行時喜歡玩一系列的地圖和
816
00:42:13,349 --> 00:42:16,090
filters can't produce that huge overhead
篩檢程式無法產生那麼大的開銷
817
00:42:16,289 --> 00:42:19,630
that we can see it is in this benchmark
我們可以看到它是在此基準測試中
818
00:42:19,829 --> 00:42:23,440
of scrabbles in order to understand
拼字遊戲以瞭解
Scrabbles:name
819
00:42:23,639 --> 00:42:28,030
where we can have a few more overhead in
在這裡我們可以有更多的開銷
820
00:42:28,230 --> 00:42:32,050
our data pipeline we have to go in a
我們的資料管道必須進入
821
00:42:32,250 --> 00:42:34,180
little bit deeper and we have to talk
再深入一點,我們不得不談談
822
00:42:34,380 --> 00:42:37,230
about some operator structure and
關於一些運營商的結構和
823
00:42:37,429 --> 00:42:39,760
understand what is going on inside under
瞭解下到底發生了什麼
824
00:42:39,960 --> 00:42:45,390
the hood in some operators so basically
基本上,一些操作員的引擎蓋
825
00:42:45,590 --> 00:42:48,789
the most common and expensive operators
最常見和最昂貴的運營商
826
00:42:48,989 --> 00:42:51,039
that we can use in our during the
我們可以在
827
00:42:51,239 --> 00:42:54,039
building of our of our application is
我們的應用程式的構建是
828
00:42:54,239 --> 00:42:57,940
the following and I ordered all the next
以下,我下令所有
829
00:42:58,139 --> 00:43:01,269
list of operators bar by their impact so
操作員清單受其影響吧
830
00:43:01,469 --> 00:43:03,820
from my point of view the most expensive
在我看來最貴
831
00:43:04,019 --> 00:43:06,640
operator and the most and the operator
運算元和最多運算元
832
00:43:06,840 --> 00:43:10,780
that impacts your performance and a lot
會影響您的表現
833
00:43:10,980 --> 00:43:12,880
in your during your data processing is
在您的資料處理過程中
834
00:43:13,079 --> 00:43:16,300
flat map I'm going to talk about flat
平面地圖,我將要談論平面
flat平面
835
00:43:16,500 --> 00:43:18,970
metal about flat map a little bit later
關於平面地圖的金屬稍後
Metal: 金屬
836
00:43:19,170 --> 00:43:21,670
but for now this is the most expected
但目前這是最令人期待的
837
00:43:21,869 --> 00:43:24,570
expensive operator you can use in your
您可以在您的設備中使用昂貴的運營商
838
00:43:24,769 --> 00:43:27,820
reactive pipeline the next one is
反應管道下一個是
839
00:43:28,019 --> 00:43:32,500
published on and publish on has a little
發表于和發表於有一點
840
00:43:32,699 --> 00:43:34,870
bit less overhead but basically this is
開銷少一點,但是基本上這是
841
00:43:35,070 --> 00:43:37,420
overhead related to switching between
與切換之間有關的開銷
Switching:to change between
842
00:43:37,619 --> 00:43:39,880
the streams and some additional data
流和一些其他資料
843
00:43:40,079 --> 00:43:42,789
structure use it under the hood the same
結構在引擎蓋下使用相同
844
00:43:42,989 --> 00:43:45,100
almost the same overhead you will have
您將擁有幾乎相同的開銷
845
00:43:45,300 --> 00:43:47,110
this publish operator in order to
此發佈運算子以
846
00:43:47,309 --> 00:43:49,390
multicast die data between few
多播之間的多播資料
Multicast:
Multi:很多種
cast:撥發
847
00:43:49,590 --> 00:43:52,150
subscribers and a little bit less
訂戶和少一點
848
00:43:52,349 --> 00:43:54,250
overhead you will have this contact mate
開銷,您將擁有此連絡人
849
00:43:54,449 --> 00:43:57,100
which also has under the hood some
裡面也有一些
850
00:43:57,300 --> 00:43:59,590
additional data structure in order to
附加資料結構以便
851
00:43:59,789 --> 00:44:03,300
handle you know in order to process data
處理您知道的以便處理資料
852
00:44:03,500 --> 00:44:06,940
so let's take a look what is going on
讓我們看看發生了什麼
853
00:44:07,139 --> 00:44:09,360
under the hood for those operators and
在那些操作員的幕後
854
00:44:09,559 --> 00:44:13,240
let me quickly show what kind of
讓我快速展示一下
855
00:44:13,440 --> 00:44:16,400
overhead we have and in
我們有的開銷
856
00:44:16,599 --> 00:44:18,830
in react to streams when we when we when
當我們什麼時候對流做出反應
857
00:44:19,030 --> 00:44:22,000
it comes to using one of the mention it
它涉及到使用提及之一
858
00:44:22,199 --> 00:44:26,150
operators like flocks like a flat map
運營商喜歡羊群,如平面地圖
859
00:44:26,349 --> 00:44:30,260
like publish on and just publish
就像發佈並只是發佈
860
00:44:30,460 --> 00:44:33,470
operator so here we have a plain example
運算子,所以這裡有一個簡單的例子
861
00:44:33,670 --> 00:44:36,830
of plain data processing where we have
我們擁有的簡單資料處理
862
00:44:37,030 --> 00:44:42,740
just a flat map which flattened a stream
只是平整了溪流的平面地圖
863
00:44:42,940 --> 00:44:45,920
a range of elements which runs on them
在其上運行的一系列元素
864
00:44:46,119 --> 00:44:48,910
on a different thread
在不同的線上
865
00:44:49,110 --> 00:44:52,840
since two streams is designed for
由於第2條流專為
866
00:44:53,039 --> 00:44:55,390
multi-threaded and design it for
多執行緒並為其設計
867
00:44:55,590 --> 00:44:59,620
handling data in the several threads or
處理多個執行緒中的資料或
868
00:44:59,820 --> 00:45:02,930
making it possible to purchase data from
可以從中購買資料
869
00:45:03,130 --> 00:45:06,320
from several source which could run on
來自幾個可以繼續運行的來源
870
00:45:06,519 --> 00:45:11,600
on several threads we one of the options
在幾個執行緒上,我們的選擇之一
871
00:45:11,800 --> 00:45:15,800
that we want to we would want to write
我們想要寫的
872
00:45:16,000 --> 00:45:19,539
is flatten the data or flatten the
是拼合數據還是拼合
873
00:45:19,739 --> 00:45:22,460
the request to another to another
對另一個人的要求
874
00:45:22,659 --> 00:45:25,580
service or requests to another services
服務或對其他服務的請求
875
00:45:25,780 --> 00:45:28,640
and during this execution in order to
在執行過程中
876
00:45:28,840 --> 00:45:31,519
handle all this data in and in order to
處理所有這些資料並為了
877
00:45:31,719 --> 00:45:37,390
you not to not shoot into your lack by
你不要不要因為缺乏而陷入困境
878
00:45:37,590 --> 00:45:40,550
improper synchronization and so for and
同步不正確等等
Improper:不適合
Synchronization:the same way
879
00:45:40,750 --> 00:45:41,060
so on
依此類推
880
00:45:41,260 --> 00:45:43,760
rag the streams does everything for you
抹布溪流為您做一切
881
00:45:43,960 --> 00:45:46,280
and react to stream serialize all the
並作出反應以串流化所有
Serialize: to put something in order
882
00:45:46,480 --> 00:45:49,039
execution and in order to serialize your
執行並序列化您的
883
00:45:49,239 --> 00:45:53,170
execution they use cues of course and
執行他們當然會使用提示
884
00:45:53,369 --> 00:45:57,320
under the hood if we if it take a look
在引擎蓋下,如果我們看看
885
00:45:57,519 --> 00:46:00,110
at what kind of which I'm talking about
我在說什麼
886
00:46:00,309 --> 00:46:03,280
I'm going to show you some additional
我要告訴你一些額外的東西
887
00:46:03,480 --> 00:46:06,490
utility class call it kills which is
實用程式類將其殺死是
Utility:something is useful but boring
888
00:46:06,690 --> 00:46:10,039
heavily used in inside inside reactor
大量用於反應堆內部
889
00:46:10,239 --> 00:46:12,590
and I'm going to just put a breakpoint
我將要設置一個中斷點
890
00:46:12,789 --> 00:46:16,039
at the stage in order to show you how
為了向您展示如何
891
00:46:16,239 --> 00:46:19,519
many cues we can produce Julian using
我們可以使用以下方法產生朱利安的許多線索
892
00:46:19,719 --> 00:46:22,960
the plain flat map operator in that case
那種情況下的普通平面地圖運算子
893
00:46:23,159 --> 00:46:28,690
so let me just start this application
所以讓我啟動這個應用程式
894
00:46:28,889 --> 00:46:32,200
and show you how many cues we produce
並告訴您我們產生了多少線索
895
00:46:32,400 --> 00:46:37,810
during their nan this one this one but
在他們難過的這段時間
896
00:46:38,010 --> 00:46:43,690
this one okay here we go here we created
這個還可以,我們去這裡創建
897
00:46:43,889 --> 00:46:45,910
the first queue or ask it for creation
第一個佇列或要求創建
898
00:46:46,110 --> 00:46:48,160
for the first queue and that happen it
對於第一個佇列,它發生了
899
00:46:48,360 --> 00:46:51,430
at the very beginning of pipeline
在管道的開始
900
00:46:51,630 --> 00:46:54,400
assembling so once we entered the flat
組裝好之後我們進入公寓
Assembling:put something together with plan
901
00:46:54,599 --> 00:46:57,430
map we produces the first queue which is
地圖,我們產生的第一個佇列是
902
00:46:57,630 --> 00:47:01,330
required for some prefetch data
一些預取資料所需
903
00:47:01,530 --> 00:47:04,269
perfection which is designed it for
專為它而設計的完美
904
00:47:04,469 --> 00:47:06,060
better better a little bit better
更好一點更好
905
00:47:06,260 --> 00:47:09,580
performance then we are going to as you
性能,那麼我們將像您一樣
906
00:47:09,780 --> 00:47:13,330
can see a little bit later we will
稍後可以看到
907
00:47:13,530 --> 00:47:15,840
produce another queue which is use it
產生另一個正在使用的佇列
908
00:47:16,039 --> 00:47:19,390
for our internal streams in order to
為了我們的內部流
909
00:47:19,590 --> 00:47:23,260
until all the elements that we requested
直到我們要求的所有要素
910
00:47:23,460 --> 00:47:25,620
for the poor souls internal skew and
對於可憐的靈魂的內在扭曲和
911
00:47:25,820 --> 00:47:29,260
here we create another we ask for
在這裡,我們創建另一個我們要求
912
00:47:29,460 --> 00:47:33,269
another queue producer and then for at
另一個佇列生產者,然後在
Queue:a line up to wait for something
913
00:47:33,469 --> 00:47:36,010
every stage at every stage of the
每個階段的每個階段
914
00:47:36,210 --> 00:47:41,370
invocation we approximately produce from
我們大約從中產生的調用
915
00:47:41,570 --> 00:47:46,030
we produce a few let me put let me put
我們生產一些讓我放
916
00:47:46,230 --> 00:47:47,950
the breakpoint here and here in order to
在這裡和這裡的中斷點,以便
917
00:47:48,150 --> 00:47:49,690
show how many queues we produce during
顯示我們在期間產生了多少個佇列
918
00:47:49,889 --> 00:47:53,890
the run time so here we go here we ask
執行時間,所以這裡我們去這裡我們問
919
00:47:54,090 --> 00:47:57,910
for or for queue supplier here we ask
我們在這裡詢問佇列供應商
920
00:47:58,110 --> 00:48:00,100
for queue supplier again and here we ask
再次要求佇列供應商,在這裡我們問
921
00:48:00,300 --> 00:48:02,980
for the first queue at this stage which
在此階段的第一個佇列中
922
00:48:03,179 --> 00:48:06,310
is run time and again and again and
是一次又一次的運行
923
00:48:06,510 --> 00:48:08,110
again and again and again and again
一遍又一遍
924
00:48:08,309 --> 00:48:12,100
again and so forth and so on and in
再等等,依此類推
925
00:48:12,300 --> 00:48:15,100
general for every for every sub stream
一般每個子流
926
00:48:15,300 --> 00:48:18,480
we will produce a queue in some
我們將在某些地方產生一個佇列
927
00:48:18,679 --> 00:48:21,610
circumstances and this is the worst case
情況,這是最壞的情況
Circumstances:situation
928
00:48:21,809 --> 00:48:23,830
because of course reactor has some
因為反應堆當然有一些
929
00:48:24,030 --> 00:48:28,090
optimizations but in general the worst
優化,但總的來說最差
930
00:48:28,289 --> 00:48:31,420
case that we can have in in run time is
我們可以在運行時使用的情況是
931
00:48:31,619 --> 00:48:36,039
an queues for an elements from the
佇列中的元素
932
00:48:36,239 --> 00:48:39,850
upstream so for example if we have 1000
上游,例如,如果我們有1000
933
00:48:40,050 --> 00:48:42,909
of elements approximately
大約元素
934
00:48:43,108 --> 00:48:47,289
1,000 of off cues which is a lot and as
1,000條線索很多,而且
935
00:48:47,489 --> 00:48:50,829
you can see here we use some GCC tools
您可以在這裡看到我們使用了一些GCC工具
936
00:48:51,028 --> 00:48:53,829
used which is designed for for handling
用於處理
937
00:48:54,028 --> 00:48:56,139
data in multi-threaded environment which
多執行緒環境中的資料
938
00:48:56,338 --> 00:48:59,109
means it we will have much more overhead
意味著我們將有更多的開銷
939
00:48:59,309 --> 00:49:02,769
in terms of volatile and vacation and
在動盪和休假方面
940
00:49:02,969 --> 00:49:05,379
so for and so on so basically you should
所以等等,基本上,你應該
941
00:49:05,579 --> 00:49:07,990
remember when you start using flat naps
記得當您開始使用午睡時
942
00:49:08,190 --> 00:49:10,480
when you start using something similar
當您開始使用類似的東西時
943
00:49:10,679 --> 00:49:13,318
like publish on you will get you will
像發佈您將獲得
944
00:49:13,518 --> 00:49:16,899
have to deal with overhead by creation
必須通過創建來處理開銷
945
00:49:17,099 --> 00:49:19,298
some additional cues during the runtime
運行時的一些其他提示
946
00:49:19,498 --> 00:49:22,030
because in order to handle data from sub
因為為了處理來自子的資料
947
00:49:22,230 --> 00:49:24,430
streams in that case you have to to
在這種情況下,您必須
948
00:49:24,630 --> 00:49:26,680
provide a cue and then drain those data
提供提示,然後耗盡那些資料
949
00:49:26,880 --> 00:49:31,990
from all available queues alright so
從所有可用的佇列中可以
950
00:49:32,190 --> 00:49:34,869
what about what about publish on so let
那發佈什麼呢?
951
00:49:35,068 --> 00:49:38,109
me show you that this published on we
我告訴你這個發表在我們身上
952
00:49:38,309 --> 00:49:40,930
basically have the similar the similar
基本有相似點
953
00:49:41,130 --> 00:49:43,480
situation we have the overhead with an
情況下,我們的開銷
954
00:49:43,679 --> 00:49:47,379
additional cue because in order to send
額外提示,因為為了發送
955
00:49:47,579 --> 00:49:50,740
an element onto another onto another
一個元素到另一個
956
00:49:50,940 --> 00:49:54,159
worker for example in that case we have
例如,在這種情況下,我們有
957
00:49:54,358 --> 00:49:57,129
to somehow include elements we have to
以某種方式包括我們必須
958
00:49:57,329 --> 00:49:59,379
somehow put this element into shared
以某種方式將此元素共用
959
00:49:59,579 --> 00:50:02,200
memory and give an access to another
記憶並允許訪問另一個
960
00:50:02,400 --> 00:50:05,349
thread and in order to do that we have
執行緒,為了做到這一點,我們有
961
00:50:05,548 --> 00:50:08,190
to use a queue again and in that case
再次使用佇列,在這種情況下
962
00:50:08,389 --> 00:50:11,109
publish on have something similar under
發表在有類似的東西下
963
00:50:11,309 --> 00:50:13,839
the hood so at the very beginning when
引擎蓋,所以在一開始的時候
964
00:50:14,039 --> 00:50:16,119
we store but where we are built in our
我們存儲,但我們建在哪裡
965
00:50:16,318 --> 00:50:21,460
pipeline we create the request for a
管道我們創建一個請求
966
00:50:21,659 --> 00:50:25,298
queue here yeah here we request for some
在這裡排隊,是的,我們要求一些
967
00:50:25,498 --> 00:50:28,750
cue supplier and basically for every
提示供應商,基本上每個
968
00:50:28,949 --> 00:50:31,480
publish on operator will be producing
在運營商上發佈將產生
969
00:50:31,679 --> 00:50:35,500
another another queue so let me run this
另一個佇列,讓我運行這個
970
00:50:35,699 --> 00:50:37,539
play an example again and let me show
再打個例子讓我示範
971
00:50:37,739 --> 00:50:41,169
you that here we have a request for you
您在這裡,我們有一個要求給您
972
00:50:41,369 --> 00:50:48,780
again so here we go and yeah yes yeah
再次如此,我們在這裡去,是的,是的,是的
973
00:50:48,980 --> 00:50:51,639
everything a scoring BBQ is a little bit
得分燒烤的一切都有點
974
00:50:51,838 --> 00:50:52,240
different
不同
975
00:50:52,440 --> 00:50:54,609
so here we have to put a breakpoint here
所以在這裡我們必須在這裡放置一個中斷點
976
00:50:54,809 --> 00:50:56,890
and if you are going
如果你要去
977
00:50:57,090 --> 00:51:00,340
to run this application we will see know
運行此應用程式,我們將知道
978
00:51:00,539 --> 00:51:08,200
why maybe here yeah yep here we are
為什麼可能在這裡是啊我們
979
00:51:08,400 --> 00:51:11,050
going to run it the Cameron and here we
要運行Cameron,在這裡我們
980
00:51:11,250 --> 00:51:14,920
go you just you just saw that we request
去你就看我們要求
981
00:51:15,119 --> 00:51:17,200
it for another Q so we produce it
再問一個Q,所以我們生產它
982
00:51:17,400 --> 00:51:21,789
another Q to do our GC and which which
另一個Q做我們的GC,哪個
983
00:51:21,989 --> 00:51:25,860
is which is supposed to to handle data
是應該處理資料的
984
00:51:26,059 --> 00:51:29,140
between upstream and downstream but on
在上游和下游之間,但在
985
00:51:29,340 --> 00:51:31,600
the different thread so basically here
所以基本上在這裡不同的執行緒
986
00:51:31,800 --> 00:51:34,210
we have another you produce it to you to
我們有另一個你生產給你
987
00:51:34,409 --> 00:51:36,190
our runtime which is another overhead
我們的運行時,這是另一個開銷
988
00:51:36,389 --> 00:51:39,310
that we can have in our application and
我們可以在我們的應用程式中擁有
989
00:51:39,510 --> 00:51:41,230
we should remember about such an
我們應該記住這樣一個
990
00:51:41,429 --> 00:51:44,430
overhead alright
開銷不錯
991
00:51:44,630 --> 00:51:47,260
the same situation we have for concrete
我們在具體情況上也有同樣的情況
Concrete:very strong
992
00:51:47,460 --> 00:51:49,960
map and the same situation we have for
地圖和我們遇到的相同情況
993
00:51:50,159 --> 00:51:52,420
publish so if you're going to for
發佈,所以如果您要
994
00:51:52,619 --> 00:51:56,769
example to look at flags concave map we
看旗凹面圖的例子我們
995
00:51:56,969 --> 00:51:59,140
will see the same queue supplier which
將看到相同的佇列供應商
996
00:51:59,340 --> 00:52:02,170
means it at runtime concave map will
表示它在運行時凹面貼圖將
997
00:52:02,369 --> 00:52:04,720
produce another queue which means one
產生另一個佇列,這意味著一個
998
00:52:04,920 --> 00:52:07,690
more one more or few more objects for
一個或多個或多個物件
999
00:52:07,889 --> 00:52:11,800
garbage collector even so the GC tools
垃圾收集器甚至是GC工具
1000
00:52:12,000 --> 00:52:17,440
is really optimized alright so we just
真的已經優化了,所以我們只是
1001
00:52:17,639 --> 00:52:20,920
cover it some overhead that we can have
支付一些我們可以擁有的開銷
1002
00:52:21,119 --> 00:52:23,920
by number by producing objects in terms
通過數量產生物體
1003
00:52:24,119 --> 00:52:28,210
of wrappers of reactive pipelines we
反應管道的包裝我們
1004
00:52:28,409 --> 00:52:31,050
just covered a few points related to
剛剛涵蓋了與
1005
00:52:31,250 --> 00:52:34,269
method invocation and in overheads that
方法調用和開銷
1006
00:52:34,469 --> 00:52:37,150
we can have by having this chain of
我們可以擁有這個
1007
00:52:37,349 --> 00:52:39,460
responsibility and invocation of this on
對此的責任和援引
1008
00:52:39,659 --> 00:52:41,980
subscriber next and we just ended up
訂戶接下來,我們剛結束
1009
00:52:42,179 --> 00:52:45,310
with some and some operators and can
與一些和一些運營商,可以
1010
00:52:45,510 --> 00:52:47,080
impact your performance a lot by
影響您的表現
1011
00:52:47,280 --> 00:52:49,539
producing a lot of a lot of additional
產生很多額外的
1012
00:52:49,739 --> 00:52:54,190
hughes design it for multi-threading for
休斯設計用於多執行緒
Hughes:name
1013
00:52:54,389 --> 00:52:57,850
multi-threading now we are going to take
多執行緒現在我們要採取
1014
00:52:58,050 --> 00:53:01,360
a look at how we can tune all those all
看看我們如何調整所有這些
1015
00:53:01,559 --> 00:53:06,130
those overhead can be tune it at all or
這些開銷完全可以調整,或者
1016
00:53:06,329 --> 00:53:08,950
we can't do that
我們不能那樣做
1017
00:53:09,150 --> 00:53:11,950
and what we can do without what we can
沒有我們所能做的
1018
00:53:12,150 --> 00:53:14,470
do in terms of our performance in terms
就我們的表現而言
1019
00:53:14,670 --> 00:53:16,119
of improvement improvements in our
改善我們的進步
1020
00:53:16,318 --> 00:53:18,609
performance without change in any line
性能不變
1021
00:53:18,809 --> 00:53:24,250
of the code and first of all one of the
的代碼,首先
1022
00:53:24,449 --> 00:53:28,180
sync thing things we can do for our
同步我們可以為我們做的事情
1023
00:53:28,380 --> 00:53:30,820
reactive streams is trying to improve
反應流正在努力改善
1024
00:53:31,019 --> 00:53:34,030
inlining during the runtime and one of
在運行時內聯並且其中之一
1025
00:53:34,230 --> 00:53:36,720
the option to you of course improve them
您的選擇當然可以改善他們
1026
00:53:36,920 --> 00:53:40,450
improve the performance is by using for
通過使用提高性能
1027
00:53:40,650 --> 00:53:45,369
example some some more powerful JIT
例如一些更強大的JIT
1028
00:53:45,568 --> 00:53:48,310
compilers like growl which means better
像咆哮這樣的編譯器意味著更好
1029
00:53:48,510 --> 00:53:50,859
in line in which offers better in line
在其中提供更好的排隊
1030
00:53:51,059 --> 00:53:52,810
in which offers better escape analysis
提供更好的逃生分析
1031
00:53:53,010 --> 00:53:55,810
which possibly mean reduce in possibly
這可能意味著減少
1032
00:53:56,010 --> 00:53:58,810
means reducing the number of off created
意味著減少關閉的數量
1033
00:53:59,010 --> 00:54:01,030
objects or reducing the number of
對象或減少數量
1034
00:54:01,230 --> 00:54:03,820
rappers or something that so as you have
說唱歌手或諸如此類的東西
1035
00:54:04,019 --> 00:54:07,450
seen all reactive pipeline is just a
看到所有反應式管道只是一個
1036
00:54:07,650 --> 00:54:10,030
wrapper around some small business logic
一些小型業務邏輯的包裝器
1037
00:54:10,230 --> 00:54:14,139
so could growl escape that or not maybe
所以可能會咆哮逃脫,也許
1038
00:54:14,338 --> 00:54:18,149
we should ask only about that later and
我們以後只應該問一下
1039
00:54:18,349 --> 00:54:21,550
also one of the most excited options and
也是最令人興奮的選擇之一,
1040
00:54:21,750 --> 00:54:24,579
most excited success story about growl
關於咆哮的最激動人心的成功故事
Growl:coding software
1041
00:54:24,778 --> 00:54:29,560
is the story from Twitter which tells us
是Twitter的故事,告訴我們
1042
00:54:29,760 --> 00:54:32,230
that we can improve the Lord and we can
我們可以改善主,我們可以
1043
00:54:32,429 --> 00:54:35,200
speed up the Scala Scala code which
加快Scala Scala代碼的速度
1044
00:54:35,400 --> 00:54:38,320
means that Scala code is basically a
意味著Scala代碼基本上是
1045
00:54:38,519 --> 00:54:40,539
functional code by basically functional
功能代碼按基本功能
1046
00:54:40,739 --> 00:54:43,000
pipelines and it could be something
管道,這可能是
1047
00:54:43,199 --> 00:54:45,129
similar to what we have in reactive
類似於我們的反應式
1048
00:54:45,329 --> 00:54:47,889
pipelines so possibly growl can improve
管道,所以可能咆哮可以改善
1049
00:54:48,088 --> 00:54:51,609
that so let's take a look I'm not going
那讓我們看看我不會
1050
00:54:51,809 --> 00:54:54,730
to run benchmarks I'm not going to teach
運行基準測試,我不打算教
1051
00:54:54,929 --> 00:54:57,190
you to run everything it at life I'm
你一生都在經營
1052
00:54:57,389 --> 00:54:59,500
just going to show you the result that I
只是向您展示我的結果
1053
00:54:59,699 --> 00:55:01,889
got during the measured measurement
在測量過程中得到
1054
00:55:02,088 --> 00:55:06,099
crawl base it grab grab a set
抓底座抓一套
1055
00:55:06,298 --> 00:55:08,829
application world versus just oracle
應用程式世界與僅Oracle
1056
00:55:09,028 --> 00:55:11,769
open JDK base hit application and here
打開JDK基本命中應用程式,然後在這裡
1057
00:55:11,969 --> 00:55:14,740
is a result as you can see is the first
如您所見,這是第一個結果
1058
00:55:14,940 --> 00:55:19,899
line or yeah the first results is the
行或是,第一個結果是
1059
00:55:20,099 --> 00:55:21,880
results of running
運行結果
1060
00:55:22,079 --> 00:55:25,510
just plain stream the same almost the
只是普通的流幾乎相同
1061
00:55:25,710 --> 00:55:29,310
same application but using open JDK 12
相同的應用程式,但使用開放式JDK 12
1062
00:55:29,510 --> 00:55:34,150
here at the bottom we have the same
在底部,我們有相同的
1063
00:55:34,349 --> 00:55:36,730
application absolutely identical code
應用程式絕對相同的代碼
1064
00:55:36,929 --> 00:55:40,900
base but executed using growl Community
基本但使用咆哮社區執行
1065
00:55:41,099 --> 00:55:45,730
Edition so in order to so community
版所以為了如此社區
1066
00:55:45,929 --> 00:55:49,060
different is what you can do do at the
不同的是您可以在
1067
00:55:49,260 --> 00:55:51,490
current moment what you can do just
當前時刻你能做什麼
1068
00:55:51,690 --> 00:55:57,220
right now by running by providing a few
現在通過提供一些
1069
00:55:57,420 --> 00:55:59,500
additional options to to your runtime
運行時的其他選項
1070
00:55:59,699 --> 00:56:02,950
and all you have to do in your
和你要做的所有事情
1071
00:56:03,150 --> 00:56:05,920
application you have to let me quickly
應用程式,你必須讓我快速
1072
00:56:06,119 --> 00:56:08,230
show what you can do for your
展示你可以做什麼
1073
00:56:08,429 --> 00:56:14,019
application and yeah whether I have or
應用程式,是的,無論我有沒有
1074
00:56:14,219 --> 00:56:19,390
not they have those options now I don't
他們現在有那些選擇我沒有
1075
00:56:19,590 --> 00:56:22,990
have those options but basically you
有那些選擇,但基本上你
1076
00:56:23,190 --> 00:56:25,390
have you can provide a few options to
您能否提供一些選擇
1077
00:56:25,590 --> 00:56:27,630
your own time like unlock additional
您自己的時間,例如解鎖更多
1078
00:56:27,829 --> 00:56:30,880
experimental and stuff and providing
實驗性的東西和提供
1079
00:56:31,079 --> 00:56:36,100
some additional vm option to to your to
一些額外的vm選項
1080
00:56:36,300 --> 00:56:39,420
your application like using some and
您的應用程式就像使用一些
1081
00:56:39,619 --> 00:56:42,610
additional compiler in your in your
您中的其他編譯器
1082
00:56:42,809 --> 00:56:45,160
application which is available out of
可用的應用程式
1083
00:56:45,360 --> 00:56:48,640
the box in open JDK 12 11 and 9 of
打開JDK 12 11和9的盒子
1084
00:56:48,840 --> 00:56:52,120
course and you can have this performance
當然,你可以有這樣的表現
1085
00:56:52,320 --> 00:56:55,360
improvement during your runtime of your
運行期間的改進
1086
00:56:55,559 --> 00:56:57,250
short live at streams which is about
在溪流中短暫生存
1087
00:56:57,449 --> 00:56:59,980
maybe which is as you can see it
也許就是你所看到的
1088
00:57:00,179 --> 00:57:02,230
improves the performance as improved
改善性能
1089
00:57:02,429 --> 00:57:05,680
about maybe 6 percent and you can have
大約百分之六,你可以
1090
00:57:05,880 --> 00:57:07,570
much more improvements for your long
長久以來的更多改進
1091
00:57:07,769 --> 00:57:10,150
live streams which is about 7 or 8
直播約7或8
1092
00:57:10,349 --> 00:57:15,420
percent just for for free just by using
僅通過使用免費獲得百分比
1093
00:57:15,619 --> 00:57:18,780
Community Edition version of growl and
咆哮的社區版和
1094
00:57:18,980 --> 00:57:21,940
what is the most excited of course if
當然,最激動的是
1095
00:57:22,139 --> 00:57:25,269
you have some additional funding we can
您還有一些額外的資金,我們可以
1096
00:57:25,469 --> 00:57:28,870
use Enterprise Edition of growl which
使用的企業版
Enterprise Edition:only company can use
1097
00:57:29,070 --> 00:57:30,760
shows much better performance
顯示更好的表現
1098
00:57:30,960 --> 00:57:31,879
improvements
改善
1099
00:57:32,079 --> 00:57:36,169
at runtime for short live at streams as
在運行時短暫流在
1100
00:57:36,369 --> 00:57:38,839
well as for long live streams and here
以及長流和這裡
1101
00:57:39,039 --> 00:57:42,710
as you can see we can have about maybe
如您所見,我們大概可以
1102
00:57:42,909 --> 00:57:45,710
two times better performance compared
性能是前者的兩倍
1103
00:57:45,909 --> 00:57:48,528
until the previous version and comparing
直到以前的版本並進行比較
1104
00:57:48,728 --> 00:57:51,919
to community Duchenne just by using an
只需使用一個
1105
00:57:52,119 --> 00:57:54,739
enterprise version of Gras which has a
企業版的Gras具有
1106
00:57:54,938 --> 00:57:57,159
better escape analysis and better and
更好的逃避分析,以及更好的
1107
00:57:57,358 --> 00:58:02,269
better and better inlining may be all X
更好的內聯可能全都是X
1108
00:58:02,469 --> 00:58:05,180
laughs can can commend something on how
笑可以讚美一些
1109
00:58:05,380 --> 00:58:08,450
we can get and why we can have all of
我們可以得到以及為什麼我們可以擁有所有
1110
00:58:08,650 --> 00:58:12,859
those improvements Alec IO with me yes
這些改進Alec IO和我在一起
1111
00:58:13,059 --> 00:58:16,489
absolutely I'm here and I can its the
絕對我在這裡,我可以
1112
00:58:16,688 --> 00:58:21,440
screen your think the rhodium project
篩選您認為的銠專案
1113
00:58:21,639 --> 00:58:25,068
it's the source of the growl compiler
這是咆哮編譯器的來源
1114
00:58:25,268 --> 00:58:29,210
like this is where it is denoted the
像這樣被稱為
Denoted:where something is noted
1115
00:58:29,409 --> 00:58:34,009
open JDK team people did alter open
開放JDK團隊的人確實改變了開放
1116
00:58:34,208 --> 00:58:37,940
behave sometimes copy the internal
有時會複製內部
1117
00:58:38,139 --> 00:58:39,499
compiler for the open source version
開源版本的編譯器
1118
00:58:39,699 --> 00:58:42,079
into the open JDK forest and then when
進入開放的JDK林,然後
1119
00:58:42,278 --> 00:58:44,059
they built open dedicate did welcome
他們建立了開放的奉獻確實歡迎
1120
00:58:44,259 --> 00:58:47,568
powder it's there right so the easiest
粉末就在那裡,所以最簡單
1121
00:58:47,768 --> 00:58:50,269
way he tried it well compiler the
他嘗試的方式很好編譯器
1122
00:58:50,469 --> 00:58:51,889
community edition is perhaps to you
社區版也許適合您
1123
00:58:52,088 --> 00:58:53,899
provide a couple of common line options
提供幾個常見的線路選項
1124
00:58:54,099 --> 00:58:57,649
as I mentioned those are the double X
正如我提到的,這些是雙X
1125
00:58:57,849 --> 00:58:59,869
and love experimental vm options and he
並喜歡實驗性的虛擬機器選項,他
1126
00:59:00,068 --> 00:59:02,509
gave a VI compiler right and you will
賦予VI編譯器權利,您將
1127
00:59:02,708 --> 00:59:05,930
get the ground the grawl and then he did growl
使他的聲發亮
1128
00:59:06,130 --> 00:59:09,318
the Enterprise Edition is a proprietary
企業版是專有的
1129
00:59:09,518 --> 00:59:12,950
product we ship concurrently download
我們同時發貨的產品下載
1130
00:59:13,150 --> 00:59:15,680
from the portal technology network
來自門戶網站技術網路
1131
00:59:15,880 --> 00:59:17,749
it comes with performance improvements
它具有性能改進
1132
00:59:17,949 --> 00:59:22,339
and mostly is more powerful version of
大部分是更強大的版本
1133
00:59:22,539 --> 00:59:26,749
the growl compiler the most notable
的編譯器最著名
Notable:important
1134
00:59:26,949 --> 00:59:29,028
optimizations which are fuller
最充分的優化
1135
00:59:29,228 --> 00:59:31,460
are the inlining outer edges and the
是內在的外邊緣和
1136
00:59:31,659 --> 00:59:34,579
polymorphic and lining which kind
多態和襯裡哪種
Polymorphic:something can change many shape
1137
00:59:34,778 --> 00:59:37,690
I think place quite a bit throw on the
我認為在
1138
00:59:37,889 --> 00:59:39,979
reacted code because when you showed
反應的代碼,因為當您顯示
1139
00:59:40,179 --> 00:59:40,548
those
那些
1140
00:59:40,748 --> 00:59:43,999
matter full chains but he went old time
很重要,但他過得很老
1141
00:59:44,199 --> 00:59:45,630
through the same signature
通過相同的簽名
1142
00:59:45,829 --> 00:59:48,750
the request request request but you
要求要求但你
1143
00:59:48,949 --> 00:59:50,250
actually request different things from
實際要求從
1144
00:59:50,449 --> 00:59:52,350
different orientation classes for one
一個人的方向不同
1145
00:59:52,550 --> 00:59:54,539
next when you these types of features
接下來,當您使用這些類型的功能時
1146
00:59:54,739 --> 00:59:58,019
like the ground enterprise to beauty
像地面企業一樣美麗
1147
00:59:58,219 --> 01:00:00,870
compiler and handle those pieces much
編譯器並處理這些部分
1148
01:00:01,070 --> 01:00:05,910
better but in general its if analysis
更好,但總體而言,如果分析
1149
01:00:06,110 --> 01:00:10,050
for to mention is is excellent in both
更值得一提的是
1150
01:00:10,250 --> 01:00:13,019
editions and both editions and provide
版本和兩個版本並提供
1151
01:00:13,219 --> 01:00:16,170
key performance improvements or various
關鍵性能改進或各種
1152
01:00:16,369 --> 01:00:20,760
for clothes and well the Enterprise
衣服和企業
1153
01:00:20,960 --> 01:00:23,340
Edition will be astir in the community
版將在社區中廣為人知
1154
01:00:23,539 --> 01:00:28,320
so you can obtain using that walk but
這樣您就可以使用步行
1155
01:00:28,519 --> 01:00:30,420
don't want them you want to stick to
不想讓他們堅持
1156
01:00:30,619 --> 01:00:34,920
little bit worse commander and and their
差一點的指揮官和他們
1157
01:00:35,119 --> 01:00:36,870
ride impact and you can even use the
騎乘衝擊力,您甚至可以使用
1158
01:00:37,070 --> 01:00:39,830
open source that's really every night
真正每晚的開源
1159
01:00:40,030 --> 01:00:44,640
right so in any case using the growl GT
對,所以在任何情況下都可以使用咆哮GT
1160
01:00:44,840 --> 01:00:48,090
you can in some cases and I would like
你可以在某些情況下,我想
1161
01:00:48,289 --> 01:00:50,340
to pay your attention that in in some
在某些地方要注意
1162
01:00:50,539 --> 01:00:52,800
cases for example when you have a huge
例如,當你有一個巨大的
1163
01:00:53,000 --> 01:00:54,840
number of reaction streams within your
您內部的反應物流數量
1164
01:00:55,039 --> 01:00:58,920
application when you have alone along a
當你獨自一人