1 00:00:05,000 --> 00:00:11,000 Hello, yes, students today will start learning a new topic, Moonface Riden, this is huge topic, 2 00:00:11,000 --> 00:00:16,000 and after this course, you will have a lot of knowledge that you can apply in different programming 3 00:00:16,000 --> 00:00:21,000 languages to support not just execution, but in scope of this course. 4 00:00:21,000 --> 00:00:27,000 I will show you how MultiThreaded works on Java examples and take into account this is the first lesson 5 00:00:27,000 --> 00:00:32,000 of new topic, this lesson a little bit more theoretical one to be sure that we have enough high level 6 00:00:32,000 --> 00:00:37,000 knowledge and understanding before we'll start sharing, quote, examples in the next lesson. 7 00:00:37,000 --> 00:00:43,000 That's why today we'll focus our attention on such questions as what is the process in our computers? 8 00:00:43,000 --> 00:00:45,000 What is the threat of execution? 9 00:00:46,000 --> 00:00:52,000 What is multithreaded in programming also in this lesson and explain how multiscreen works and what 10 00:00:52,000 --> 00:00:54,000 threats and translation means. 11 00:00:54,000 --> 00:00:59,000 And the standard answers on these questions will bring us to the point where we can discuss with you 12 00:00:59,000 --> 00:01:02,000 why multiscreen is needed and what a benefit, something which is written. 13 00:01:03,000 --> 00:01:09,000 And also we'll discuss dark side of multithreaded to understand it, drawbacks and what we should always 14 00:01:09,000 --> 00:01:12,000 take into account while working as much as freedom. 15 00:01:12,000 --> 00:01:17,000 And the end of the lesson, I will give you an overview of what packages and tools we are going to learn 16 00:01:17,000 --> 00:01:19,000 in this course in JDK. 17 00:01:19,000 --> 00:01:25,000 Answering all these questions will give you insights on what we are going to learn in this course. 18 00:01:25,000 --> 00:01:27,000 I believe we are good with our agenda for today. 19 00:01:27,000 --> 00:01:34,000 Let's start and before we even start discussion of multithreaded in the program, let's understand what 20 00:01:34,000 --> 00:01:36,000 the process is in computer science. 21 00:01:36,000 --> 00:01:40,000 In simple words, process is an instance of a computer program. 22 00:01:41,000 --> 00:01:42,000 You opened a glimpse. 23 00:01:42,000 --> 00:01:45,000 It's a separate process to run as a Java program. 24 00:01:46,000 --> 00:01:47,000 Is that a separate Java process? 25 00:01:48,000 --> 00:01:53,000 Computer program is nothing more than a set of instructions for a machine but process. 26 00:01:54,000 --> 00:01:56,000 It is an execution of these instructions. 27 00:01:57,000 --> 00:02:00,000 A process has a self-contained execution environment. 28 00:02:00,000 --> 00:02:04,000 That means that each process has its own memory space. 29 00:02:05,000 --> 00:02:10,000 And as I said before, usually processes and programs are considered to be very close terms. 30 00:02:11,000 --> 00:02:18,000 But what end user interaction with may be a set of processes that interact with each other doing no 31 00:02:18,000 --> 00:02:21,000 such popular Internet browser as Google Chrome? 32 00:02:21,000 --> 00:02:24,000 So long to go home and look at the task manager. 33 00:02:25,000 --> 00:02:28,000 You will see separate processes for each stop in your browser. 34 00:02:28,000 --> 00:02:33,000 But for the end user, Manglehorn perceived like a single application. 35 00:02:33,000 --> 00:02:40,000 This is because most operating system support interpersonal communication resources, sap, pipes and 36 00:02:40,000 --> 00:02:41,000 sockets. 37 00:02:41,000 --> 00:02:47,000 These resources are used to interact between different processes, homes, and this is pretty straightforward. 38 00:02:48,000 --> 00:02:51,000 Now let's understand what threat of execution is. 39 00:02:51,000 --> 00:02:56,000 Each process may be executed in one or more threats of execution. 40 00:02:56,000 --> 00:02:59,000 In this case, our program is executed concurrently. 41 00:02:59,000 --> 00:03:03,000 In other words, some instructions are executed in parallel. 42 00:03:03,000 --> 00:03:09,000 In computer science, concurrency is a duplicate of different parts or units of a program algorithm 43 00:03:10,000 --> 00:03:17,000 or problem to be executed out of order or at the same time simultaneously without affecting the final 44 00:03:17,000 --> 00:03:17,000 outcome. 45 00:03:18,000 --> 00:03:22,000 So we can say that each process may be executed in multiple threats. 46 00:03:23,000 --> 00:03:27,000 In the learning literature, you might even find mention about different name of abstracts. 47 00:03:27,000 --> 00:03:34,000 Sometimes they're called as lightweight processes or threats, share process resources. 48 00:03:34,000 --> 00:03:37,000 This is something that may cause issues during the multithreaded. 49 00:03:38,000 --> 00:03:44,000 If you're allocated two gigabytes for a GBM, that means all created stress will work within these two 50 00:03:44,000 --> 00:03:47,000 gigabytes and we'll share in between each other. 51 00:03:48,000 --> 00:03:51,000 Knowing your memory will be allocated to threat of execution. 52 00:03:52,000 --> 00:03:54,000 I hope you already know the answer to my next question. 53 00:03:55,000 --> 00:03:56,000 What is a move to threaten? 54 00:03:57,000 --> 00:04:01,000 To threaten is the process of execution of program in multiple threats. 55 00:04:01,000 --> 00:04:04,000 Most of the operating systems nowadays support this feature. 56 00:04:05,000 --> 00:04:11,000 You have multiple course in your processa multithreaded allows you to use all course for execution of 57 00:04:11,000 --> 00:04:13,000 your program instructions. 58 00:04:13,000 --> 00:04:21,000 EPU executes one task at a time and we as the software engineers will write instructions how to split 59 00:04:22,000 --> 00:04:23,000 between different threats of execution. 60 00:04:24,000 --> 00:04:25,000 That's what we are going to learn. 61 00:04:26,000 --> 00:04:27,000 Let me explain it now. 62 00:04:27,000 --> 00:04:32,000 How multiscreen program works on the high level, you always have one threat of execution. 63 00:04:32,000 --> 00:04:34,000 One program just started. 64 00:04:34,000 --> 00:04:36,000 That is your main threat of execution. 65 00:04:37,000 --> 00:04:43,000 After that, you can run so-called child threats of execution and describe instructions what those threats 66 00:04:43,000 --> 00:04:44,000 should work on. 67 00:04:44,000 --> 00:04:48,000 In parallel, the different use cases of using Otis Redding. 68 00:04:48,000 --> 00:04:49,000 And we'll look at them in the minute. 69 00:04:50,000 --> 00:04:56,000 And now the important thing, how to synchronize the work of different threats imagines at your peril 70 00:04:56,000 --> 00:04:58,000 to your work between multiple threats. 71 00:04:59,000 --> 00:05:00,000 It is another thing that. 72 00:05:00,000 --> 00:05:06,000 All of the threats are part of one program, and sometimes threat needs to update on the man's threat 73 00:05:06,000 --> 00:05:09,000 about state of execution or result of execution. 74 00:05:10,000 --> 00:05:15,000 But sometimes threats also need to interact with each other, take into account all threats, working 75 00:05:15,000 --> 00:05:17,000 with some shared resource. 76 00:05:17,000 --> 00:05:23,000 To rephrase this in simple words, imagine that you have a collection of users and you need to filter 77 00:05:23,000 --> 00:05:28,000 this collection and remove users that have less than one thousand dollars total. 78 00:05:28,000 --> 00:05:34,000 Check in your online shop and you decided to split the task between different threats of execution. 79 00:05:34,000 --> 00:05:39,000 Each threat of execution works with shared resource collection of users. 80 00:05:39,000 --> 00:05:46,000 Each threat takes users from this common collection to provide the result of the specific part of namely 81 00:05:46,000 --> 00:05:53,000 users are equally distributed between different threats but all threats to removing users from the common 82 00:05:53,000 --> 00:05:55,000 collection shared between all of them. 83 00:05:55,000 --> 00:05:59,000 Can you understand what the shared resource mean on this example? 84 00:06:00,000 --> 00:06:05,000 Let's review also other use cases of multithreaded programming and the one we might want to use this 85 00:06:05,000 --> 00:06:05,000 approach. 86 00:06:06,000 --> 00:06:08,000 I believe that we have already discussed the first case. 87 00:06:09,000 --> 00:06:15,000 That is the case when different threats on these slides are marked with capital key and numbers reaching 88 00:06:15,000 --> 00:06:22,000 out to shared resource that is marked with capital are in this case to modify the state of the resource. 89 00:06:23,000 --> 00:06:27,000 So next year's case of using multithreaded is reading and writing operations. 90 00:06:28,000 --> 00:06:33,000 You know that in Java, most of the input output streams, blogs and in process of execution. 91 00:06:34,000 --> 00:06:37,000 So why don't we use features of malicious reading? 92 00:06:37,000 --> 00:06:42,000 And in case we need to write, let's say, some file, we do this in a separate thread. 93 00:06:42,000 --> 00:06:50,000 For example, a user asked us to do an expert of all users to see format and wants to download this 94 00:06:50,000 --> 00:06:50,000 info. 95 00:06:50,000 --> 00:06:52,000 No problem at all. 96 00:06:52,000 --> 00:06:58,000 We are writing a separate threat of execution and other parts of our program proceed, working without 97 00:06:58,000 --> 00:07:05,000 any free's user still able to click on other buttons and perform other operations while file downloading 98 00:07:05,000 --> 00:07:06,000 is in progress. 99 00:07:06,000 --> 00:07:07,000 Is that clear? 100 00:07:07,000 --> 00:07:09,000 Same situation with redundant info. 101 00:07:10,000 --> 00:07:16,000 Let's create a separate threat of execution that will show a status of uploading, and once uploading 102 00:07:16,000 --> 00:07:21,000 is finished, we will be notified about that fact and we'll proceed from there. 103 00:07:21,000 --> 00:07:27,000 Pay attention to how your clips is working when your important project or performance some other operations. 104 00:07:28,000 --> 00:07:32,000 Eclipse is also Java application was multithreaded feature inside. 105 00:07:32,000 --> 00:07:39,000 When any operation is performed, UI is not completely blocked and you still can perform as operations 106 00:07:39,000 --> 00:07:40,000 with the clips in parallel. 107 00:07:41,000 --> 00:07:47,000 The third case is a case when once to produce some data and other thread consumes this data. 108 00:07:48,000 --> 00:07:54,000 These threads are working independently and potentially may interact with the help of the queue between 109 00:07:54,000 --> 00:07:54,000 each other. 110 00:07:55,000 --> 00:08:02,000 On the slide here you can see that we have producer and consumer producer send some item ready for processing 111 00:08:02,000 --> 00:08:08,000 to the queue and consumer take this item from the queue when ready to process the next item. 112 00:08:08,000 --> 00:08:12,000 The next case is a typical scenario with writers and readers. 113 00:08:13,000 --> 00:08:19,000 Imagine that you have some shared resource, some shared buffer, and from one side you have writers 114 00:08:19,000 --> 00:08:21,000 that might be separate services. 115 00:08:21,000 --> 00:08:24,000 Read that, write some information to the buffer. 116 00:08:24,000 --> 00:08:28,000 It can be is a strong representation of new objects or requests to the app. 117 00:08:28,000 --> 00:08:30,000 Literally everything. 118 00:08:30,000 --> 00:08:34,000 And on the other side, you have readers that read data from the buffer. 119 00:08:35,000 --> 00:08:41,000 This example is different from all previous ones that we have discussed because here we have some specific 120 00:08:41,000 --> 00:08:47,000 conditions on the ones that can write to the buffer at the point of time readers can to read during 121 00:08:47,000 --> 00:08:53,000 the writing, all the readers may read data simultaneously, will have similar tasks in this course. 122 00:08:53,000 --> 00:08:56,000 And I will show you how to solve this task. 123 00:08:56,000 --> 00:08:58,000 Really interesting, don't you think so? 124 00:08:59,000 --> 00:09:03,000 Probably these are the most popular use cases of using an Otis Redding approach. 125 00:09:03,000 --> 00:09:10,000 Definitely there will be variations of these use cases and sometimes even different scenarios, but 126 00:09:10,000 --> 00:09:13,000 we'll try to cover as much as we can on this course. 127 00:09:13,000 --> 00:09:17,000 Now let's discuss advantages and disadvantages of multi threading approach. 128 00:09:18,000 --> 00:09:20,000 Let's start from advantages of multithreaded. 129 00:09:20,000 --> 00:09:22,000 It was to name a few important ones. 130 00:09:22,000 --> 00:09:29,000 They are effective use of multiple course of your processa, high performance of your program during 131 00:09:29,000 --> 00:09:32,000 execution of specific operations and data processing. 132 00:09:33,000 --> 00:09:36,000 Good to use with operations that block mansard of execution. 133 00:09:37,000 --> 00:09:43,000 Like I said before, in case of working with input output streams, application responsiveness, if 134 00:09:43,000 --> 00:09:49,000 there is a need to perform, some operation application won't be frozen until that operation is completed. 135 00:09:50,000 --> 00:09:53,000 Instead, I will execute request in a separate thread. 136 00:09:54,000 --> 00:10:00,000 Probably these are main advantages of using these advantages, maintaining the Australian approach. 137 00:10:00,000 --> 00:10:06,000 Across all over the world and in different programming languages, but there are always two sides of 138 00:10:06,000 --> 00:10:10,000 a metal, all these advantages come with a group of disadvantages. 139 00:10:10,000 --> 00:10:17,000 Some of them are it is easy to use is written incorrectly by saying this, I would like to highlight 140 00:10:17,000 --> 00:10:18,000 that using what is right. 141 00:10:18,000 --> 00:10:24,000 And it requires a good understanding of the toolset to implement concurrent execution of your program. 142 00:10:24,000 --> 00:10:26,000 And that is relatively easy to do. 143 00:10:26,000 --> 00:10:32,000 A mistake, for example, in synchronous court, sometimes also of execution doesn't play a big role. 144 00:10:33,000 --> 00:10:39,000 Or you can write code in different ways with the thread and it is not so easy and straightforward. 145 00:10:40,000 --> 00:10:46,000 You need to be sure about what pieces of code you need to synchronize between different threads, how 146 00:10:46,000 --> 00:10:50,000 much stress you need, how to split work between threads and so on. 147 00:10:50,000 --> 00:10:55,000 Incorrect and suitable usage of Montasser in May cause your performance. 148 00:10:56,000 --> 00:11:00,000 You need to understand that multithreaded works perfectly, not for all tasks. 149 00:11:01,000 --> 00:11:06,000 For example, you might not always see the benefit of using what is written while working with small 150 00:11:06,000 --> 00:11:12,000 data in case you want to implement a certain approach and filter an election was one hundred integers. 151 00:11:12,000 --> 00:11:18,000 More likely, it will take more time than performing the same operation synchronously in one step. 152 00:11:19,000 --> 00:11:19,000 Why? 153 00:11:20,000 --> 00:11:26,000 Because running threads, synchronization time, corporatization of different threads on different CPUs. 154 00:11:26,000 --> 00:11:31,000 All of this takes time and we need to be sure that when we apply to certain approach, it is really 155 00:11:31,000 --> 00:11:38,000 worth it and we will benefit from this and some mistakes even can bring it to the deadlock and lifework 156 00:11:38,000 --> 00:11:39,000 cases. 157 00:11:39,000 --> 00:11:45,000 When your program doesn't perform any useful activity, hard to debark application and find the mistake, 158 00:11:46,000 --> 00:11:52,000 it is much harder to replicate an error in the multithreaded application than it is to do so in a single 159 00:11:52,000 --> 00:11:53,000 threaded application. 160 00:11:53,000 --> 00:11:58,000 As a result, it is more difficult to identify and verify root causes when error. 161 00:11:58,000 --> 00:12:03,000 Secure testing process of multithreaded app is more difficult. 162 00:12:03,000 --> 00:12:09,000 Testing the multithreaded application is more difficult than testing a single application because the 163 00:12:09,000 --> 00:12:13,000 effects are often timing related and more difficult to reproduce. 164 00:12:13,000 --> 00:12:19,000 It is difficult to introduce notice writing approach already created code because all code needs to 165 00:12:19,000 --> 00:12:24,000 be analyzed by engineers, static variables, methods and locations and critical areas. 166 00:12:24,000 --> 00:12:30,000 Everything needs to be reviewed and adjusted to make sure that the implementation of concurrent programming 167 00:12:30,000 --> 00:12:32,000 approach will not affect all application. 168 00:12:33,000 --> 00:12:39,000 The main disadvantages of multithreaded that we also need to consider when we want to create scalable 169 00:12:39,000 --> 00:12:40,000 app with high performance. 170 00:12:41,000 --> 00:12:47,000 In this course, we are going to learn tools for concurrent programming most tools, classes and interfaces 171 00:12:47,000 --> 00:12:48,000 allocated in Java. 172 00:12:48,000 --> 00:12:50,000 You can current package. 173 00:12:50,000 --> 00:12:57,000 This package also has some set packages, also some main types like Runnable and Thread located in general 174 00:12:57,000 --> 00:12:58,000 and package. 175 00:12:58,000 --> 00:13:05,000 But most of the classes and interfaces, including concurrent collections, locks and other mechanisms 176 00:13:05,000 --> 00:13:10,000 for stress synchronization executer services and most of the things that we are going to learn allocated 177 00:13:10,000 --> 00:13:12,000 individual concurrent package. 178 00:13:12,000 --> 00:13:15,000 We have really a lot of interesting things to learn. 179 00:13:15,000 --> 00:13:19,000 Now let's recap what we have learned in this lesson and this lesson. 180 00:13:19,000 --> 00:13:22,000 We learned what the process is and what the threat is. 181 00:13:23,000 --> 00:13:28,000 We also learned what is a multiscreen program programming now, you know, the most popular use cases 182 00:13:28,000 --> 00:13:30,000 of not just training programs. 183 00:13:30,000 --> 00:13:34,000 We learned advantages and disadvantages of concurrent programming. 184 00:13:35,000 --> 00:13:36,000 That's all for this lesson. 185 00:13:36,000 --> 00:13:39,000 Looking forward to seeing you in the next lesson.