--- 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 當你獨自一人