lec05
dz / distributed_systems_MIT / lec05Node Tree
- go
- producer_consumer
- raft
- cv_broadcast
Nodes
| go | |
| content | the Go Progamming language |
| children | goroutines, memory_model, primitives, concurrency (Concurrency primitives in go) |
| concurrency | |
| content | Concurrency |
| children | goroutines, primitives |
| parents | go |
| primitives | |
| content | Primitives |
| children | goroutines, mutexes, periodic_function, channels, closures, condition_variables |
| parents | go, concurrency |
| goroutines | |
| content | Goroutines |
| children | expressivity_not_performance |
| parents | concurrency, primitives, go |
| expressivity_not_performance | |
| content | not used for performance reasons, but expressivity |
| parents | goroutines |
| flashcard (front) | Are goroutines good for performance? |
| flashcard (back) | While goroutines may help with performance, they are primarily used for expressivity |
| memory_model | |
| content | Memory Model in Go |
| parents | go |
| remarks | There was a paper that discussed how the memory model works. The wisdom boiled down here is "don't be clever". |
| closures | |
| content | Closures |
| children | identifier_capture |
| parents | primitives |
| identifier_capture | |
| content | Identifier Capture |
| children | scope_correct |
| parents | closures |
| scope_correct | |
| content | Make sure scope is correct |
| parents | identifier_capture |
| periodic_function | |
| content | Period Function: Run something, sleep, run again, etc. |
| children | periodic_function_variation (variation of periodic function pattern) |
| parents | primitives |
| periodic_function_variation | |
| content | Periodic Function Variation: Periodic Until (Some Conidition) |
| parents | periodic_function |
| mutexes | |
| content | Mutexes (Mutual Exclusion) |
| children | protects_invariants (Mutexes protect against invariants), run_atomically, critical_section |
| parents | primitives |
| serial | |
| content | Serial |
| parents | run_atomically |
| run_atomically | |
| content | Makes blocks of code run atomically |
| children | serial |
| parents | mutexes |
| critical_section | |
| content | Critical Section: region of code inside the mutex. this is guaranteed mutual exclusion The region of code found inside a mutex |
| parents | mutexes |
| flashcard (front) | Critial Section |
| flashcard (back) | |
| protects_invariants | |
| content | Mutexes protect invariants |
| parents | mutexes |
| remarks | Probably would be a good idea to define this better |
| condition_variables | |
| content | Condition Variables |
| children | threads_waiting (CV are used to coordinate when condition comes true), cv_wait |
| parents | primitives |
| threads_waiting | |
| content | Used when threads are wiating for some condition to come true |
| parents | condition_variables |
| flashcard (front) | What is a conidition variable and when should it be used? |
| flashcard (back) | Condition variables are Go primitives used when you have threads are waiting for some condition to come true. |
| cv_wait | |
| content | wait: called when it is waiting |
| parents | condition_variables |
| cv_broadcast | |
| content | broadcast: called when something is changed |
| children | wakes_up |
| wakes_up | |
| content | Wakes up whoever is waiting. |
| children | lost_wakeup_problem |
| parents | cv_broadcast |
| lost_wakeup_problem | |
| content | The lost wakeup problem |
| parents | wakes_up |
| remarks | This was mentioned in the lecture, but I forget what it means. I think it was a vague mention in the lecture. |
| channels | |
| content | Channels |
| children | probably_avoid, synchronous, wait_groups (channels used as an approach for wait groups), channels_useful_for |
| parents | primitives |
| synchronous | |
| content | Synchronous |
| children | blocking |
| parents | channels |
| remarks | Communication Mechanism |
| blocking | |
| content | Blocking behavior |
| parents | synchronous |
| channels_useful_for | |
| content | Useful for |
| parents | channels |
| producer_consumer | |
| content | producer/consumer |
| remarks | vaguely mentioned. not sure? |
| probably_avoid | |
| content | channels should probably be avoided most of the time |
| parents | channels |
| wait_groups | |
| content | Can be used as an approach for wait groups |
| children | threads_to_be_done |
| parents | channels |
| threads_to_be_done | |
| content | Wait Group waits for a certain number of threads to be done. |
| parents | wait_groups |
| raft | |
| content | RAFT |
| children | common_bugs (Common bugs when implementing RAFT), debugging |
| common_bugs | |
| content | Common Bugs |
| children | holding_lock, attempt_election_function |
| parents | raft |
| holding_lock | |
| content | Holding lock through RPC calls causes deadlock |
| parents | common_bugs |
| attempt_election_function | |
| content | Attempt an election |
| children | elected_two_leaders |
| parents | common_bugs |
| elected_two_leaders | |
| content | Bug: elected two leaders, when there should be only one. |
| children | double_check |
| parents | attempt_election_function |
| double_check | |
| content | One Solution: double check that the term is the same, and that they are still a candidate |
| parents | elected_two_leaders |
| debugging | |
| content | Debugging RAFT implementations |
| children | race_flag, where_stuck |
| parents | raft |
| where_stuck | |
| content | Where stuck? |
| children | log_printf, minimize_scope |
| parents | debugging |
| log_printf | |
| content | Log.printf(...) |
| children | dprintf |
| parents | where_stuck |
| minimize_scope | |
| content | Minimize scope of bug |
| parents | where_stuck |
| dprintf | |
| content | dprintf() wrapper |
| parents | log_printf |
| race_flag | |
| content | Using the "-race" flag to check for race coniditions |
| parents | debugging |