How to customize home page layout according to the user? I have a site with more than 2000 users. Users can log in to the site, can see the content, make it as his favorite etc. My home page (Dashboard of user) has different blocks created of views.

How can I allow users to customize the position of these blocks?

They can show/hide blocks, change the position (region) of blocks, can select which content need to show from the view results, change the sort criteria.
It would be quite hard to provide an exact answer as I don't know how you can affect the view results in your setup. In terms of the rearranging the content and even to save the settings I would suggest that you create a new 'textarea' user field which will be hidden in the front end and use a jquery plugin like this: https://github.com/troolee/gridstack.js to update the value of the field using AXAX when the onchange event fires. That way when you load the homepage you can request that user field and arrange your blocks in the order they wanted. You could use a similar approach for which content is shown and then read it back on page load and pass it to the view as an argument.