 Let's understand our synchronous Apex, so our synchronous processing basics and our synchronous process executes a task in the background. So we have basically two types of processes, one is synchronous and one is asynchronous. So whatever we understood till now, those are synchronous processes like if you initiated that process, so it will complete its execution at the same time. But in some scenarios, you want our synchronous processes like if particular resources not available, so when those resources are available then those processes starts their execution. So those kind of processes are known as our synchronous process. So user doesn't have to wait for the task to finish. Use our synchronous Apex for callouts to external systems, operations that require higher limits, code that needs to run at a certain time. So whenever you want to hit any external system through your code, so those are basically known as callouts. So that you can do with the help of our synchronous Apex. So we have four different features available in our synchronous process that is future method, cueable Apex, batch Apex and we can also schedule Apex that is known as schedule Apex. So for callouts, we can use them then operations that require higher limits. So basically if you have initiated any synchronous process and from that synchronous process, if you want to initiate any asynchronous process. So our synchronous process basically runs in a separate thread and our synchronous and synchronous both will be having separate governor limits. So if you are using our synchronous process, so limits will be increased. Then if you want to run particular code at a particular time, then you can also use our synchronous process. So as I discussed earlier like we have four types of our synchronous processing. So all are listed over here. So first one is future methods. So future methods run in their own thread and do not start until resources are available. Common scenarios are web service call out. Next is batch Apex. So if you want to run large jobs that would exceed normal processing limits. So in that case, you can prefer batch Apex. Common scenarios are data cleansing or archiving of records. So if you want to perform these operations, so you can create batch Apex. Next we have cueable Apex. So cueable Apex is basically similar to future methods, but provide additional job chaining and allow more complex data types to be used. So basically in future methods, we can use primitives and collection of primitives, but in cueable Apex you can use non primitive data type as well as an argument. So, like cueable is advanced form of future method, but still in some scenarios you can use future methods in some scenarios you can use cueable Apex. Let's talk about common scenarios for cueable Apex. So if you want to perform sequential processing operations with external web services. So in that case, you can call, or you can create cueable Apex. So basically schedule Apex. If you want to run your Apex class at a specified time. So in that case you can schedule that particular class. So basically if you have suppose you have created a batch Apex, and you want to schedule that so you can do that with the help of schedule Apex. So while writing Apex class you need to implement one interface and after implementation of that interface you can schedule that particular class. And you can schedule your Apex class on daily or weekly basis. So common scenario is like if you want to perform any task daily or weekly basis. So you can schedule your Apex. So these are four types those are available under asynchronous processing. Now, let's talk about governor and execution limits. So asynchronous Apex provides higher governor and execution limits. The number of SOQL is doubled from 100 to 200 total heap size and maximum CPU time are similarly larger for our synchronous calls. As you get higher limits with our sync. Also those governor limits are independent of the limits in the synchronous request that queue the awesome request initially. We have already discussed like synchronous process, which is initiating our synchronous process. So both will be having the separate governor limits. So this way in totality, your limits will be increased. Now there are some challenges which are available in case of our sync process. You need to ensure fairness of processing because you cannot guarantee like when that process will be executed in case of future method or like in that case whenever resources are available then they will be executed. And you need to ensure fault tolerance like if they they are not like executing successfully so how you will be handling those issues. So these are the challenges that you need to take care. Now how our synchronous process works. So basically there are three steps. So initially process will be in queue. So it will be available in a queue and whenever resources are available then it will be executed. So after like aligning that process of the queue then second step is persistence and when all the operations will be done, then that process will be removed from the queue. So that is third step, which is known as the queue. Right, so this is all about our synchronous processing in upcoming lesson you will understand like how we can implement future method, a batch of picks, queueable apex and scheduleable apex.