java-development-for-beginners-learnit / 27 - Multithreading /008 Executor Service Implementations & ThreadFactory_en.srt
Tan115's picture
Add files using upload-large-folder tool
1b558aa verified
Raw
History Blame Contribute Delete
34.8 kB
1
00:00:06,000 --> 00:00:06,000
Hello.
2
00:00:06,000 --> 00:00:12,000
There are students in this lesson, we'll learn implementations of executive service interface and parents
3
00:00:12,000 --> 00:00:12,000
lessons.
4
00:00:12,000 --> 00:00:19,000
We learned what executive interface is and what executive service interface is to show them.
5
00:00:19,000 --> 00:00:25,000
I had to use one implementation of executive service that today will require different implementations
6
00:00:25,000 --> 00:00:31,000
of this interface and different use cases so that you'll know when to use one specific implementation.
7
00:00:32,000 --> 00:00:38,000
Today will review fix reticule executer cash, streetball, single streetball, shadowless reticule.
8
00:00:39,000 --> 00:00:41,000
As we will go over each executer one by one.
9
00:00:41,000 --> 00:00:48,000
I will also explain what threat factor is and how you can use it during the installation of threats.
10
00:00:48,000 --> 00:00:54,000
You understand what a threat starvation is and how to calculate a perfect number of threats for your
11
00:00:54,000 --> 00:00:55,000
threat pool.
12
00:00:55,000 --> 00:01:00,000
I'm going to show you formulas and we'll teach you how to calculate the blocking coefficient.
13
00:01:01,000 --> 00:01:04,000
And as always, we are going to have a lot of examples to the source.
14
00:01:04,000 --> 00:01:08,000
Code of all examples is in attachment to this lesson.
15
00:01:08,000 --> 00:01:10,000
Let's start today.
16
00:01:10,000 --> 00:01:14,000
We'll learn with you everything from official documentation and the code examples.
17
00:01:14,000 --> 00:01:16,000
So let me start screen sharing.
18
00:01:17,000 --> 00:01:19,000
I open source code of executor's class.
19
00:01:20,000 --> 00:01:25,000
I believe you remember that we have factory mascots in this class that allows us to create instances
20
00:01:25,000 --> 00:01:31,000
of different implementations of executive service interface and considerable amount of this factory
21
00:01:31,000 --> 00:01:33,000
masses and level of details.
22
00:01:33,000 --> 00:01:39,000
I would like to focus your attention on the difference between all of them and the main features rather
23
00:01:39,000 --> 00:01:41,000
than on the source code of each particular executer.
24
00:01:42,000 --> 00:01:43,000
So let's go one by one.
25
00:01:44,000 --> 00:01:47,000
We will start from the top from the first factory mass.
26
00:01:48,000 --> 00:01:53,000
This method is called new fixed thread pool and takes in value as method argument.
27
00:01:54,000 --> 00:01:57,000
You can see that we reach an object of streetball executive type.
28
00:01:58,000 --> 00:01:59,000
Let me open this one.
29
00:01:59,000 --> 00:02:07,000
SWEPCO executive type extends Abstract Executive Service Zissis abstract class that is used by different
30
00:02:07,000 --> 00:02:14,000
implementations of executive service, the common implementations of some methods that are appropriate
31
00:02:14,000 --> 00:02:18,000
for all concrete classes that extends this abasic one.
32
00:02:18,000 --> 00:02:25,000
And as you can see, abstract executive service implements executive service, which in turn implements
33
00:02:25,000 --> 00:02:29,000
executer hope that the Iraqi is clear for you.
34
00:02:29,000 --> 00:02:33,000
It will be similar for other executor's for our lesson today.
35
00:02:34,000 --> 00:02:36,000
Let's now get back to Executor's.
36
00:02:36,000 --> 00:02:44,000
So this massive new streetball grades and executive service that we use as fixed number of threats,
37
00:02:44,000 --> 00:02:48,000
the fixed number of threats is passed to the method as methods argument.
38
00:02:49,000 --> 00:02:50,000
The idea is simple.
39
00:02:50,000 --> 00:02:56,000
All threats work on tasks in parallel, depending on your computer characteristics.
40
00:02:56,000 --> 00:03:03,000
The number of threads running simultaneously and in parallel is different in case the more tasks than
41
00:03:03,000 --> 00:03:10,000
current threats available to execute those tasks will wait in the queue until any threat from the pool
42
00:03:10,000 --> 00:03:11,000
will be available again.
43
00:03:11,000 --> 00:03:17,000
What will happen in case any other threats will be terminated because of the failure during the execution,
44
00:03:18,000 --> 00:03:22,000
new one will be created and take its place to execute subsequent tasks.
45
00:03:22,000 --> 00:03:24,000
Let's look at the example now.
46
00:03:24,000 --> 00:03:30,000
I open the fixed thread, pull them across all executer examples that I will show you today.
47
00:03:30,000 --> 00:03:38,000
Located in executor's package, you can find a link to the package was all executor's examples in attachments
48
00:03:38,000 --> 00:03:39,000
to this lesson.
49
00:03:39,000 --> 00:03:44,000
I create my Reppel executer, pay attention and create a pool for three threats.
50
00:03:45,000 --> 00:03:51,000
Also, you can see that I cost object here because factoring in massive new fixed rate pool declares
51
00:03:51,000 --> 00:03:58,000
that executive service will be returned and recommends us to operate with objects on this abstraction
52
00:03:58,000 --> 00:03:58,000
level.
53
00:03:59,000 --> 00:04:03,000
But we know that this concrete implementation of executive service will be used.
54
00:04:04,000 --> 00:04:09,000
I need this to show your class specific matters that are absent in executive service.
55
00:04:09,000 --> 00:04:13,000
After that, I submit for similar tasks to the executive service.
56
00:04:14,000 --> 00:04:17,000
Each task sleep for one second and that's it.
57
00:04:18,000 --> 00:04:24,000
I need the sleep for the sake of example, I call shut down MassArt here to not allow anyone to submit
58
00:04:24,000 --> 00:04:28,000
any other tasks to this executive service after this line.
59
00:04:29,000 --> 00:04:32,000
After that I principle size and Q's size.
60
00:04:32,000 --> 00:04:39,000
These are class specific masses that are absent in executive service, but that will allow us to show
61
00:04:39,000 --> 00:04:41,000
the future of fixed threat pool.
62
00:04:41,000 --> 00:04:42,000
Let me run the program.
63
00:04:43,000 --> 00:04:47,000
I run the program and I can see that pool size is three.
64
00:04:47,000 --> 00:04:50,000
The number of threats that I have in my pool.
65
00:04:50,000 --> 00:04:56,000
I passed this number to the factory Masset and number of tasks in queue is one.
66
00:04:56,000 --> 00:05:02,000
That is because each task sleeps one second and the fourth task has no threats that would.
67
00:05:03,000 --> 00:05:09,000
I said that's why it is in queue for the execution, but once these tasks are finished, one of the
68
00:05:09,000 --> 00:05:11,000
threats is the last one.
69
00:05:12,000 --> 00:05:15,000
Once all tasks are processed, UVM is finished.
70
00:05:16,000 --> 00:05:20,000
That is because I call shut down MassArt, imperfect world.
71
00:05:20,000 --> 00:05:26,000
I should call every termination Hendel potential interrupted exception and call shut down now.
72
00:05:26,000 --> 00:05:32,000
But we discussed this in previous lesson and to not write a lot of code that doesn't directly relate
73
00:05:32,000 --> 00:05:34,000
to the topic today, I will skip it.
74
00:05:34,000 --> 00:05:40,000
But please make sure you learned well previous lesson and you know how to terminate multiple threats.
75
00:05:40,000 --> 00:05:46,000
With the help of executive service, my students often ask me how to define ideal number of threats
76
00:05:46,000 --> 00:05:48,000
to create infix threat pool.
77
00:05:49,000 --> 00:05:54,000
I mean, what criteria we should use to define whether we need to create four, eight or chanceries
78
00:05:54,000 --> 00:05:55,000
in pool.
79
00:05:56,000 --> 00:06:02,000
It is not an easy question, but I will try explain it as simple as possible before calculating perfect
80
00:06:02,000 --> 00:06:03,000
number of threats.
81
00:06:03,000 --> 00:06:05,000
You should understand your limits.
82
00:06:05,000 --> 00:06:09,000
And I'm talking not only about a number of CPU's in your computer.
83
00:06:10,000 --> 00:06:12,000
I also want to draw attention to other limits.
84
00:06:13,000 --> 00:06:17,000
For example, Zamunda limit on number of connections to a database.
85
00:06:17,000 --> 00:06:23,000
Does it make sense to have one hundred twines threats that interact with database and have limited database
86
00:06:23,000 --> 00:06:25,000
connection with ten connections?
87
00:06:25,000 --> 00:06:27,000
Only the answer is obvious.
88
00:06:28,000 --> 00:06:34,000
Or if a threat interacts with other system and sends a request to the APIs that can produce only a few
89
00:06:34,000 --> 00:06:35,000
requests simultaneously.
90
00:06:36,000 --> 00:06:43,000
This fact also needs to be considered because in the most pessimistic case, we may end up with reservation
91
00:06:43,000 --> 00:06:45,000
state or even without of memory error.
92
00:06:46,000 --> 00:06:47,000
What a threat.
93
00:06:47,000 --> 00:06:47,000
Starvation.
94
00:06:48,000 --> 00:06:54,000
Starvation describes a situation where Sweat is unable to gain regular access to shared resources and
95
00:06:54,000 --> 00:06:56,000
is unable to make progress.
96
00:06:56,000 --> 00:07:02,000
This happens when shared resources are made unavailable for long periods of grief threats.
97
00:07:02,000 --> 00:07:07,000
And of course, another important factor to consider is number of years.
98
00:07:07,000 --> 00:07:13,000
You can identify a number of tips like this call runtime static MassArt on runtime Closs.
99
00:07:14,000 --> 00:07:20,000
You would get the reference to the runtime object and invoke available processers you will get enough
100
00:07:20,000 --> 00:07:21,000
value.
101
00:07:21,000 --> 00:07:24,000
This would be the number, of course, on your computer.
102
00:07:24,000 --> 00:07:31,000
Be careful with this massive one you will work with container's this approach might provide it was wrong
103
00:07:31,000 --> 00:07:34,000
information without any specific constraints.
104
00:07:34,000 --> 00:07:41,000
A continuous process will be able to see the hardware on the operating system and it might happen at
105
00:07:41,000 --> 00:07:43,000
your containerised application.
106
00:07:43,000 --> 00:07:48,000
Supposedly is too coarse only, but your operating system has eight.
107
00:07:48,000 --> 00:07:52,000
So just be careful when you rely on this value.
108
00:07:52,000 --> 00:07:59,000
Here we have another variable executive service, too, and I want to show you that you can initialised
109
00:07:59,000 --> 00:08:04,000
your executive service just like this in one line by passing the number, of course, to the masses.
110
00:08:05,000 --> 00:08:11,000
But still, I mentioned the different factors that would impact our decision and that will help us to
111
00:08:11,000 --> 00:08:13,000
answer what is a growing number of threats.
112
00:08:13,000 --> 00:08:15,000
And it took great in my streetball.
113
00:08:15,000 --> 00:08:19,000
Let's review a formula from book Java Concurrency.
114
00:08:19,000 --> 00:08:25,000
In practice, number of threads equal to the number of available course multiplied by the result of
115
00:08:25,000 --> 00:08:30,000
the next expression one plus the result of division between the wait time and service time.
116
00:08:31,000 --> 00:08:34,000
Don't worry, it is not so scary as it looks like.
117
00:08:34,000 --> 00:08:41,000
And the first glance, let's review it in detail and we need to understand first what is the wait time
118
00:08:41,000 --> 00:08:42,000
and what is a service?
119
00:08:42,000 --> 00:08:49,000
Time wasting time is a time spent waiting for inputs and outputs bound tasks to complete.
120
00:08:49,000 --> 00:08:55,000
For example, this is not the amount of time you're waiting for a response from remote server.
121
00:08:56,000 --> 00:09:03,000
And this is just one example because it might be not only input output tasks, but any tasks that makes
122
00:09:03,000 --> 00:09:09,000
execution wait for some event and as examples might be getting monitor log.
123
00:09:09,000 --> 00:09:10,000
What is service time?
124
00:09:11,000 --> 00:09:13,000
Service time is a useful time.
125
00:09:13,000 --> 00:09:21,000
The time spent being busy, for example, process HTP, response, data filtering or transformation,
126
00:09:21,000 --> 00:09:27,000
etc. So dividing the waiting time by service time will get the result that is often called blocking
127
00:09:27,000 --> 00:09:32,000
coefficient, a computation intensive task Hasbrouck and coefficient close to zero.
128
00:09:33,000 --> 00:09:39,000
Now let's assume that we have four CPUs and let's substitute numbers in the formula with your data and
129
00:09:39,000 --> 00:09:41,000
zero for blocking creation.
130
00:09:42,000 --> 00:09:44,000
What result you have in this case?
131
00:09:44,000 --> 00:09:47,000
The number of threads is equal to the number of available course.
132
00:09:47,000 --> 00:09:52,000
If all tasks are computation intensive, then this is all we need.
133
00:09:52,000 --> 00:09:59,000
And having more threats won't help us to improve performance because we respect the restriction of having
134
00:09:59,000 --> 00:10:01,000
a limited number of CPUs.
135
00:10:02,000 --> 00:10:03,000
Now, let's give you another example.
136
00:10:04,000 --> 00:10:09,000
Imagine that our application process, different amount of data that is read from the server in the
137
00:10:09,000 --> 00:10:12,000
Internet, you just send the request.
138
00:10:12,000 --> 00:10:19,000
And the way the response was, the data program reads a bunch of data and processes it after that program,
139
00:10:19,000 --> 00:10:26,000
reads another batch of data and processes it again, having the performance benchmark evaluation.
140
00:10:26,000 --> 00:10:32,000
You know, that process of reviewing one batch takes two hundred milliseconds, for example, and time
141
00:10:32,000 --> 00:10:33,000
of processing of this data.
142
00:10:34,000 --> 00:10:35,000
Take 20 milliseconds.
143
00:10:36,000 --> 00:10:38,000
Let's substitute numbers in our formula.
144
00:10:39,000 --> 00:10:43,000
And in this case, following calculations in formula, we need forty four sets.
145
00:10:44,000 --> 00:10:46,000
It seems to be a big amount of threats.
146
00:10:46,000 --> 00:10:48,000
Let's think about it from another point of view.
147
00:10:49,000 --> 00:10:55,000
You're going to have tasks that will be blocked waiting for two hundred milliseconds and what these
148
00:10:55,000 --> 00:10:58,000
threats should do, just sitting and waiting.
149
00:10:58,000 --> 00:11:02,000
They're doing exactly this thing, sitting and waiting.
150
00:11:02,000 --> 00:11:08,000
And in the meantime, we have processors that are ready and happy to execute any other computations.
151
00:11:09,000 --> 00:11:14,000
That's why in this particular case, with such weighting and service time, it is reasonable to have
152
00:11:14,000 --> 00:11:17,000
44 phosphorescence a fixed rate pool.
153
00:11:17,000 --> 00:11:22,000
There is a good practice to have separate executive services for each set of tasks.
154
00:11:22,000 --> 00:11:28,000
In this case, each executive service may be configured accordingly for a specific class of tasks,
155
00:11:29,000 --> 00:11:31,000
and one would have multiple executive services.
156
00:11:31,000 --> 00:11:36,000
We need to adjust our formula by adding CPU utilization parameter to it.
157
00:11:37,000 --> 00:11:37,000
What?
158
00:11:37,000 --> 00:11:45,000
Well, you may be in target CPU utilization variable from zero to one inclusively where zero means that
159
00:11:45,000 --> 00:11:52,000
streetball want to use processors at all and one means that streetball will use one hundred percent
160
00:11:52,000 --> 00:11:53,000
of processors for time.
161
00:11:54,000 --> 00:11:56,000
The formula becomes localizes.
162
00:11:57,000 --> 00:12:04,000
In the similar case, and if I plan to grant only 50 percent of processers time to the batch data processing
163
00:12:04,000 --> 00:12:11,000
and another 50 percent will be dedicated to other activities or other executive service, we are going
164
00:12:11,000 --> 00:12:12,000
to have another result.
165
00:12:13,000 --> 00:12:20,000
I add a zero point five to reflect targeted utilization and as a result, we have twenty two threats.
166
00:12:20,000 --> 00:12:26,000
This number of threats you need to create in streetball to be efficient with these group of tasks.
167
00:12:27,000 --> 00:12:33,000
Definitely life cases are different and it is not always so easy to calculate weighting and service
168
00:12:33,000 --> 00:12:35,000
time for each task that you are going to create.
169
00:12:36,000 --> 00:12:42,000
That's why these formulas are just a great starting point for you and hope that these formulas will
170
00:12:42,000 --> 00:12:47,000
help you to understand the motivation to make a final decision regarding a number of threads in the
171
00:12:47,000 --> 00:12:48,000
thread.
172
00:12:49,000 --> 00:12:54,000
OK, now when you know, let's get back to Demo New Fix.
173
00:12:54,000 --> 00:13:01,000
Red Bull Market is overloaded and has versions that accepts in value and threat factor what is a threat
174
00:13:01,000 --> 00:13:01,000
factor.
175
00:13:02,000 --> 00:13:04,000
Let's open the source code of this type.
176
00:13:04,000 --> 00:13:11,000
Objects of a threat factory type are used to create new threats by giving implementation to the new
177
00:13:11,000 --> 00:13:12,000
threat massive.
178
00:13:12,000 --> 00:13:18,000
You can define the process and activities that are needed to be executed during the threat creation.
179
00:13:18,000 --> 00:13:24,000
Let me explain to you with the example I open threat factor factory demo file.
180
00:13:24,000 --> 00:13:29,000
I create a variable that would store WELI of number of threats in a threat posed.
181
00:13:30,000 --> 00:13:34,000
I create executive service and have fixed number of threats input.
182
00:13:35,000 --> 00:13:38,000
And when I create executive service, I call masses.
183
00:13:38,000 --> 00:13:41,000
It also takes threat factor as my argument.
184
00:13:41,000 --> 00:13:44,000
I pass object of the false threat factory type.
185
00:13:45,000 --> 00:13:46,000
What is this?
186
00:13:46,000 --> 00:13:49,000
This is my own implementation of threat factory interface.
187
00:13:50,000 --> 00:13:55,000
For the sake of the demo, I decided to keep all types in one demo file to not navigate between the
188
00:13:55,000 --> 00:13:58,000
multiple files of one example.
189
00:13:58,000 --> 00:14:01,000
And here I implemented Nusrat Masset.
190
00:14:01,000 --> 00:14:02,000
But why?
191
00:14:02,000 --> 00:14:08,000
We need to override process of threat creation and control it is the motivation to implement custom
192
00:14:08,000 --> 00:14:10,000
sweat factory is different.
193
00:14:10,000 --> 00:14:14,000
You may need to perform some additional actions before creating a threat.
194
00:14:14,000 --> 00:14:20,000
We need to create demon stress or for the debugging purposes, you need to name threats in a different
195
00:14:20,000 --> 00:14:21,000
way than mine.
196
00:14:21,000 --> 00:14:22,000
The different cases.
197
00:14:22,000 --> 00:14:25,000
Why you want to control process of threat creation.
198
00:14:26,000 --> 00:14:28,000
So you implemented a new threat.
199
00:14:28,000 --> 00:14:30,000
Massive in this case.
200
00:14:30,000 --> 00:14:33,000
I want to name threats for a different point.
201
00:14:33,000 --> 00:14:40,000
You can see that I created atomic integer counter and threats by adding value of my counter, incrementing
202
00:14:40,000 --> 00:14:41,000
it afterwards.
203
00:14:42,000 --> 00:14:42,000
That's it.
204
00:14:43,000 --> 00:14:51,000
Now, I said the same number of tasks I have for threats in goal and four tasks each task brings.
205
00:14:51,000 --> 00:14:55,000
Threatening to consult you can submit is a callable or runnable.
206
00:14:56,000 --> 00:14:58,000
Don't pay attention to a new threat.
207
00:14:58,000 --> 00:15:00,000
Must be acceptant Runnable.
208
00:15:00,000 --> 00:15:05,000
This is not directly connected in new executer you create a threat.
209
00:15:06,000 --> 00:15:12,000
Threats are created during the executive servicing utilization in this case and once threats are created,
210
00:15:13,000 --> 00:15:16,000
I submit tasks that will be implemented by these threats.
211
00:15:17,000 --> 00:15:20,000
Tasks may be easier of type runnable or callable.
212
00:15:20,000 --> 00:15:22,000
I keep command here.
213
00:15:22,000 --> 00:15:24,000
Example with Kobel task submission.
214
00:15:25,000 --> 00:15:29,000
Just in case you would like to uncommented and try once you would get the source code.
215
00:15:30,000 --> 00:15:35,000
Let's run this example and in console you might see the threats are different from default.
216
00:15:36,000 --> 00:15:41,000
This proves that Masset of the threat factor was used to create threats in the threat pool.
217
00:15:42,000 --> 00:15:42,000
Is that clear?
218
00:15:43,000 --> 00:15:44,000
Great.
219
00:15:44,000 --> 00:15:46,000
Let's move on now.
220
00:15:46,000 --> 00:15:49,000
Let's look at all the implementations of executive service interface.
221
00:15:50,000 --> 00:15:56,000
Probably remember that when we just first time created executive service, I used cached thread pool.
222
00:15:56,000 --> 00:16:00,000
Let's investigate this one in the source code of executive class.
223
00:16:00,000 --> 00:16:08,000
You can see that when I call New Castrato, I also creates red radical executer just with different
224
00:16:08,000 --> 00:16:08,000
arguments.
225
00:16:09,000 --> 00:16:16,000
So as you may already understand, these mass return us different versions of pre configure thread Thredbo
226
00:16:16,000 --> 00:16:19,000
executer to understand better.
227
00:16:19,000 --> 00:16:23,000
What is the difference between cash Stratego and fix reticle.
228
00:16:23,000 --> 00:16:29,000
Let's compare constructor arguments that are used during the initialization of threat to execute executer
229
00:16:29,000 --> 00:16:29,000
object.
230
00:16:30,000 --> 00:16:35,000
You can see that in cash streetball first two arguments are zero and max integer.
231
00:16:36,000 --> 00:16:40,000
These arguments are responsible to set Corpuz size and maximum pool size.
232
00:16:41,000 --> 00:16:43,000
What is Corpuz size does.
233
00:16:43,000 --> 00:16:47,000
This is a number of threats to keep in the pool, even if they're idle.
234
00:16:47,000 --> 00:16:53,000
How it is different from fixed threat pool infix threat pool equate specific number of threats.
235
00:16:53,000 --> 00:16:56,000
The number ipass as method argument is a.
236
00:16:56,000 --> 00:17:03,000
Plus size and the maximum size, the argument is a keep a lifetime when the number of threats is greater
237
00:17:03,000 --> 00:17:04,000
than the core.
238
00:17:04,000 --> 00:17:11,000
This is the maximum time that excess idle threats will wait for new tasks before terminated.
239
00:17:11,000 --> 00:17:14,000
We can see that they keep a lifetime in cash.
240
00:17:14,000 --> 00:17:18,000
Pool is 60 seconds and infix threat pools.
241
00:17:18,000 --> 00:17:20,000
This value is zero milliseconds.
242
00:17:20,000 --> 00:17:25,000
And the first argument is a cue that is used to store tasks before they're executed.
243
00:17:26,000 --> 00:17:31,000
We can see that in cash throughout threat pool, we use synchronous cue and then fixed threat pool.
244
00:17:31,000 --> 00:17:38,000
We use link, lock and key to what conclusion we may do based on these constructor arguments, these
245
00:17:38,000 --> 00:17:39,000
arguments.
246
00:17:39,000 --> 00:17:46,000
This means that the Casarett pool might grow without bounds to accommodate any number of submitted tasks.
247
00:17:46,000 --> 00:17:53,000
But when the threats are not needed anymore, they will be disposed of after 60 seconds of inactivity
248
00:17:53,000 --> 00:17:55,000
when it might be useful.
249
00:17:55,000 --> 00:18:01,000
For example, when we have a lot of shirtsleeve and tasks in application in a synchronous queue, each
250
00:18:01,000 --> 00:18:05,000
in search operation must wait for a corresponding remove operation.
251
00:18:06,000 --> 00:18:12,000
So we can say that pairs of insert and remove operations always occur simultaneously.
252
00:18:12,000 --> 00:18:15,000
That means that the queue never actually contains.
253
00:18:15,000 --> 00:18:18,000
Annison is as good for most cases.
254
00:18:18,000 --> 00:18:24,000
As I said before, it is good in case we have a lot of shirtsleeve and tasks, but this is not always
255
00:18:24,000 --> 00:18:24,000
the case.
256
00:18:25,000 --> 00:18:31,000
In other cases, using of threat cached pool may impact performance of our application in case with
257
00:18:31,000 --> 00:18:32,000
cash streetball.
258
00:18:32,000 --> 00:18:39,000
Each new task will create a new threat if all existing threats are busy and and reflect potential issues
259
00:18:39,000 --> 00:18:43,000
that might happen during the high load where you have to fix pool.
260
00:18:43,000 --> 00:18:50,000
In the best case, we may get a reservation situation at worst out of memory error.
261
00:18:50,000 --> 00:18:55,000
This is something that you need to consider when you decide to use pre configured threat pool executer
262
00:18:55,000 --> 00:18:58,000
created by new Casarett Pool Factory MassArt.
263
00:18:59,000 --> 00:19:04,000
Let's look at example now I open cash thread pool demo file here.
264
00:19:04,000 --> 00:19:08,000
We have similar example to one we have in the fixed thread pool demo file.
265
00:19:08,000 --> 00:19:15,000
The only difference is that I use different factor Massud from executor's class I call new cache streetball
266
00:19:15,000 --> 00:19:15,000
method.
267
00:19:16,000 --> 00:19:20,000
I submit for tasks and print, pool size and size.
268
00:19:20,000 --> 00:19:27,000
And as we expected, pool size will be equal to the number of submitted tasks in this case because each
269
00:19:27,000 --> 00:19:29,000
thread has leape inside.
270
00:19:30,000 --> 00:19:37,000
And by the moment new task is submitted, there are no available threats and new threat is created and
271
00:19:37,000 --> 00:19:43,000
queue size will be equal to zero because we are synchronous queue inside the threat to execute.
272
00:19:43,000 --> 00:19:44,000
Does it make sense?
273
00:19:45,000 --> 00:19:52,000
And also there is a factory method that takes threat factor as method argument so you can use it when
274
00:19:52,000 --> 00:19:52,000
needed.
275
00:19:53,000 --> 00:19:53,000
That's it.
276
00:19:53,000 --> 00:19:58,000
Regarding the cash threat pool, let's continue the next factory method.
277
00:19:58,000 --> 00:20:05,000
Probably not worse for a separate demo you can call new single thread executer this massive returns
278
00:20:05,000 --> 00:20:08,000
and executive service that manages one thread.
279
00:20:09,000 --> 00:20:15,000
If this single thread terminates due to a failure during the execution prior to shutdown, a new one
280
00:20:15,000 --> 00:20:19,000
will take its place if needed to execute subsequent tasks.
281
00:20:19,000 --> 00:20:26,000
Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given
282
00:20:26,000 --> 00:20:26,000
time.
283
00:20:27,000 --> 00:20:34,000
Additionally, this Red Bull executer is decorated with an immutable wrapper so it can be reconfigured
284
00:20:34,000 --> 00:20:35,000
after creation.
285
00:20:36,000 --> 00:20:38,000
Let's return now skinless Red Bull.
286
00:20:38,000 --> 00:20:45,000
Executer we have to factor masses in executor's class that allows us to create executor's service of
287
00:20:45,000 --> 00:20:49,000
this type ZAYA News kidlets red pool within the parameters.
288
00:20:49,000 --> 00:20:55,000
It describes a number of course, threads and overloaded masses that takes that factory as an additional
289
00:20:55,000 --> 00:20:57,000
argument in the source code.
290
00:20:57,000 --> 00:21:00,000
We can use it on an instance of scandals.
291
00:21:00,000 --> 00:21:02,000
Reppel exactly the type.
292
00:21:02,000 --> 00:21:05,000
Let's open it and investigate this type.
293
00:21:05,000 --> 00:21:13,000
As we can see from the time declaration, it extends red executer and implements kidlet executive service
294
00:21:13,000 --> 00:21:17,000
interface, which in turn extends executive service interface.
295
00:21:18,000 --> 00:21:22,000
We need to understand what new behavior is introduced by scheduled executive service.
296
00:21:23,000 --> 00:21:30,000
Basically for new methods are introduced on Vermonter's cattle methods it takes is a random object.
297
00:21:31,000 --> 00:21:35,000
This method allows us to run a task once after a specified delay.
298
00:21:36,000 --> 00:21:43,000
Also cattle at fixed rate mass that allows us to run a task after a specified initial delay and then
299
00:21:43,000 --> 00:21:46,000
run it repeatedly with a certain period.
300
00:21:46,000 --> 00:21:51,000
The period argument is a time measured between the starting times of the tasks.
301
00:21:51,000 --> 00:21:53,000
So the execution rate is fixed.
302
00:21:54,000 --> 00:21:56,000
Schedule was fixed, the.
303
00:21:56,000 --> 00:22:02,000
A.M. is similar to scheduled at a fixed rate in that it would be the difference as a given task, but
304
00:22:02,000 --> 00:22:09,000
the specified delay is measured between the end of the previous task and start of the next task.
305
00:22:09,000 --> 00:22:14,000
Its execution rate may vary depending on the time it takes to run any given task.
306
00:22:15,000 --> 00:22:20,000
Let's open skidoos, read to them clause to review, quote, examples with this executer.
307
00:22:21,000 --> 00:22:26,000
The first example just shows us how to execute some task after initial delay.
308
00:22:27,000 --> 00:22:30,000
I create executer calls Macit.
309
00:22:30,000 --> 00:22:34,000
I just want to bring threatening to cancel after one second delay.
310
00:22:34,000 --> 00:22:36,000
This all tasks that I want to schedule.
311
00:22:37,000 --> 00:22:39,000
Let's run this program in console.
312
00:22:39,000 --> 00:22:42,000
We can see that threatening has been printed.
313
00:22:42,000 --> 00:22:46,000
This is how simple you must kill task for execution.
314
00:22:46,000 --> 00:22:54,000
Now I open scattered pull them two in this file we have them off schedule at fixed rate and schedule.
315
00:22:54,000 --> 00:22:59,000
With delay I create executer and then Wolk's cattle at fixed rate.
316
00:22:59,000 --> 00:23:06,000
Initial delay is five hundred milliseconds and after that start of each new task in each one second
317
00:23:07,000 --> 00:23:11,000
after seven seconds waiting, we shut down our executive service.
318
00:23:12,000 --> 00:23:18,000
I printer separator here and after that I create new executer and then walks schedule with a fixed delay.
319
00:23:19,000 --> 00:23:25,000
I am going to run the program and I'd like you pay attention to the fact that these two masses will
320
00:23:25,000 --> 00:23:32,000
work slightly differently because they track the same interval a little bit differently from start of
321
00:23:32,000 --> 00:23:40,000
one task to start of another task and from finish off one task to start off another task, I intentionally
322
00:23:40,000 --> 00:23:42,000
added sleep in each task.
323
00:23:42,000 --> 00:23:49,000
In this case, we may notice how in the first case, new task is executed each second, and in the second
324
00:23:49,000 --> 00:23:57,000
case, each task is executed approximately one and a half second because interval is measured between
325
00:23:57,000 --> 00:24:00,000
end of the one task and start of another task.
326
00:24:00,000 --> 00:24:02,000
And each task has sleep inside.
327
00:24:03,000 --> 00:24:07,000
I run the program and you can watch the result and feel the difference.
328
00:24:08,000 --> 00:24:09,000
Can you see the difference?
329
00:24:10,000 --> 00:24:15,000
Hope that with this example it is clear HouseCalls Reticule executive works.
330
00:24:15,000 --> 00:24:21,000
Also, we have similar factory method, but just for executer with one thread you can use three single
331
00:24:21,000 --> 00:24:24,000
threads candidate executive factory method to create similar.
332
00:24:24,000 --> 00:24:26,000
Executer was one thread.
333
00:24:26,000 --> 00:24:32,000
You can see that there is a wrapper here that exposes only the scheduled executive service methods of
334
00:24:32,000 --> 00:24:38,000
a scheduled executive service implementation and service over overloaded method that takes threat factor
335
00:24:38,000 --> 00:24:45,000
as method argument removed almost all factory methods to create different executive services.
336
00:24:45,000 --> 00:24:51,000
We still need to learn for doing framework to understand how, for example, works.
337
00:24:52,000 --> 00:24:56,000
That's why we'll review new works to improve Masset in the next lesson.
338
00:24:56,000 --> 00:24:57,000
That's it for today.
339
00:24:58,000 --> 00:25:01,000
Let's review what we have learned today in this lesson.
340
00:25:01,000 --> 00:25:05,000
In this lesson, we learn different implementations of executive services.
341
00:25:06,000 --> 00:25:11,000
We learn thread pool, executive class and how to create a fixed threat pool and cache threat pool.
342
00:25:12,000 --> 00:25:16,000
Now, you know the difference in these pro configurator threat pools.
343
00:25:16,000 --> 00:25:22,000
Also, you know the formula and the rules that will help you to calculate the ideal number of threats
344
00:25:22,000 --> 00:25:24,000
to create in the threat pool.
345
00:25:24,000 --> 00:25:28,000
Also, we learned how to work with threat factory after this lesson.
346
00:25:28,000 --> 00:25:32,000
You know how to work with a single threat pool and scandalous threat pool.
347
00:25:32,000 --> 00:25:35,000
Executer that's all what I have for you for this lesson.
348
00:25:36,000 --> 00:25:37,000
Thanks a lot for your attention.
349
00:25:38,000 --> 00:25:40,000
Have a great day and see you in the next lesson.