@@ -36,6 +36,28 @@ The **Lock** can only be **acquired** by **only 1 go routine** at a time, thus m
3636space** in the ** context** of an operation is considered to be ** Atomic** , resulting in ** deterministic** and ** correct** results when
3737** multiple concurrent operations** are involved in the game.
3838
39+ #### Benefits of Serializability
40+ 41+ Let’s first understand the difference between a serial and non-serial schedule for a better understanding of the benefits
42+ that serializability provides. In the case of a serial schedule, the multiple transactions involved are executed one
43+ after the other sequentially with no overlap. This helps maintain the consistency in the database but limits the scope
44+ of concurrency and often a smaller transaction might end up waiting for a long time due to an execution of a previous
45+ longer transaction. Serial schedule also consumes a lot of CPU resources which gets wasted due to the serial execution.
46+ 47+ In the case with a non-serial schedule, the multiple transactions executed are interleaved leading to inconsistency in
48+ the database but at the same time helps overcome the disadvantages of a serial schedule such as concurrent execution
49+ and wastage of CPU resources.
50+ 51+ It’s established that the execution of multiple transactions in a non-serial schedule takes place concurrently.
52+ And because of the multiple combinations involved, the output obtained may be incorrect at times which cannot be afforded.
53+ This is where serializability comes into the picture and help us determine if the output obtained from a parallelly
54+ executed schedule is correct or not.
55+ 56+ In other words, Serializability serves as a measure of correctness for the transactions executed concurrently.
57+ It serves a major role in concurrency control that is crucial for the database and is considered to provide
58+ maximum isolation between the multiple transactions involved. The process of Serializability can also help in achieving
59+ the database consistency which otherwise is not possible for a non-serial schedule.
60+ 3961### Presentations
4062
4163- [ Concurrency in Go #6 - Mutexes] ( https://github.com/golang-basics/concurrency/raw/master/presentations/6_mutexes )
@@ -90,10 +112,17 @@ space** in the **context** of an operation is considered to be **Atomic**, resul
90112- [ Mutual Exclusion - Wiki] ( https://en.wikipedia.org/wiki/Mutual_exclusion )
91113- [ Dining Philosophers Problem - Wiki] ( https://en.wikipedia.org/wiki/Dining_philosophers_problem )
92114- [ Test and Set - Wiki] ( https://en.wikipedia.org/wiki/Test-and-set )
93- - [ Concurrency Control - Wiki] ( https://en.wikipedia.org/wiki/Concurrency_control )
94115- [ Tuple Space - Wiki] ( https://en.wikipedia.org/wiki/Tuple_space )
95116- [ Message Passing - Wiki] ( https://en.wikipedia.org/wiki/Message_passing )
96117- [ Semaphore - Wiki] ( https://en.wikipedia.org/wiki/Semaphore_(programming) )
118+ - [ Concurrency Control - Wiki] ( https://en.wikipedia.org/wiki/Concurrency_control )
119+ - [ Serializability - Wiki] ( https://en.wikipedia.org/wiki/Serializability )
120+ - [ Serializability in DBMS - Educba] ( https://www.educba.com/serializability-in-dbms/ )
121+ - [ Result Serializability - Geeks for Geeks] ( https://www.geeksforgeeks.org/result-serializability-in-dbms/ )
122+ - [ Schedule - Wiki] ( https://en.wikipedia.org/wiki/Schedule_(computer_science) )
123+ - [ Recoverability - Wiki] ( https://en.wikipedia.org/wiki/Schedule_(computer_science)#Recoverable )
124+ - [ 2PL - Wiki] ( https://en.wikipedia.org/wiki/Two-phase_locking )
125+ - [ Transaction Processing - Wiki] ( https://en.wikipedia.org/wiki/Transaction_processing )
97126- [ Pessimistic vs Optimistic Locking - StackOverflow] ( https://stackoverflow.com/questions/129329/optimistic-vs-pessimistic-locking )
98127- [ Pessimistic vs Optimistic Locking - StackOverflow Explanation] ( https://stackoverflow.com/a/58952004 )
99128- [ Check Deadlock - Go Source Code] ( https://github.com/golang/go/blob/35ea62468bf7e3a79011c3ad713e847daa9a45a2/src/runtime/proc.go#L4159-L4233 )
0 commit comments