You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thanks for the awesome write-up. Really enjoying it. I was going through the code for the asynchronous webserver and couldn't understand why you used thread_local for the reactor and scheduler. Intuitively I understand. We would like to have a thread for the reactor and scheduler so as to not block. I couldn't see that we actually use threads in the code. So is there a reason to use them? I tried removing it and using a Lazy type to make it work. I am new to rust in general so I might be missing something obvious.
The text was updated successfully, but these errors were encountered:
thread_local let's you create variables local to each thread, in our case the main thread, guarded by the LocalKey::get API so they can't be shared. This lets us use single-threaded interior mutability like RefCell. With a global static we would have to use types with synchronization, like sync::Lazy.
Thanks for the response. My follow-up questions would be. My understanding is that the program only has one main thread right now. If so, is it necessary to still use the thread_local to prevent sharing between threads given there are no other threads?
static variables are required to implement Sync because it is impossible for the compiler to know if we access it from multiple threads or not. In this case we could use unsafe because we know our program is single-threaded, but that isn't sound in general for a runtime library.
Hello,
Thanks for the awesome write-up. Really enjoying it. I was going through the code for the asynchronous webserver and couldn't understand why you used thread_local for the reactor and scheduler. Intuitively I understand. We would like to have a thread for the reactor and scheduler so as to not block. I couldn't see that we actually use threads in the code. So is there a reason to use them? I tried removing it and using a Lazy type to make it work. I am new to rust in general so I might be missing something obvious.
The text was updated successfully, but these errors were encountered: