Can someone explain what's the difference between async methods and creating a thread in Vala? And where I should use one or another in my code?
What's the difference between async methods and threads?
487 views Asked by serge1peshcoff At
1
There are 1 answers
Related Questions in MULTITHREADING
- How can I outsource worker processes within a for loop?
- OpenMP & oneTbb difference
- Receiving Notifications for Individual Task Completion OmniThreadLibrary Parallel.ForEach
- C++ error: no matching member function for call to 'enqueue' futures.emplace_back(TP.enqueue(sum_plus_one, x, &M));
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Qt: running callback in the main thread from the worker thread
- Using `static` on a AVX2 counter function increases performance ~10x in MT environment without any change in Compiler optimizations
- Heap sort with multithreading
- windows multithreading CreateMutex
- The problem of "fine-grained locks and two-phase locking algorithm"
- OpenMP multi-threading not working if OpenMPI set to use one or two MPI processor
- WPF Windows Initializing is locking the separated thread in .Net 8
- TCP Client Losing Connection When Writing Data
- vc++ thread constructor throwing compiler error c2672
- ASP.NET Core 6 Web API : best way to pause before resending email
Related Questions in ASYNCHRONOUS
- Callback and Microtask Queue of Java Script
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Musical chairs: How can an asynchronous task cancel a synchronous one in c#?
- Asynchronously add to queue, synchronously process it
- Sending asynchronous requests without a pre-defined task list
- Value of a variable remains unaltered when assigned during a loop
- How to efficiently test some HTTP proxies for accessing a specific domain?
- How do you update Celery Task State/Status to see it in Flower?
- Why use tasks and async await in C# inline?
- NEXTJS14 DRIZZLE : Async issue when trying to post data from component into DB
- Blocking wait on future OUTSIDE of async functions
- save to csv simultaneously opcua datachange notification
- How can I load data from secrets-manager synchronously in TypeScript
- How to avoid timeout of API before ending?
- Conditional Synchronous Import in JavaScript, to export a simple object and not promise, possible?
Related Questions in VALA
- Writing value to GATT characteristic via DBUS results in "garbage" value during subsequent read
- Stuck at 101 switching protocols in Vala/Liboup websocket client
- Static enums in Vala?
- GTK: "Object with ID not found" error, but the ID is empty
- how to read a string array property of an outer class?
- How do I return a C array of strings to be used in Vala code?
- Bind more than one source properties to a target property in Vala?
- Write into stdin, read from stdout Subprocess/Process in Glib/GTK Vala
- How do I make a Gtk4 application with a menu bar in Vala?
- gtk4 styleprovider vs set_css_classes
- Looking for an example how to use ColumnView in GTK4 with editable cells
- Replace a paintable with another in vala Gtk4
- What does the class keyword do to a method in Vala?
- Giving vala a variable to function doesn't pass right
- Simple image viewer with Vala and GTK4
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Threads are independently schedulable while
asyncmethods run in the main thread, that is, they are coroutines. For example, if you block reading a socket in a separate thread, the application can continue running, but if you do this in anasyncmethod, the application will block.Threads and coroutines (
asyncmethods) can solve some of the same problems, but are generally doing different things. In Gtk+ (and many other GUI systems) only one thread can manipulate the GUI objects and events from GUI objects will only happen in this thread (usually called the event dispatch thread). If another thread wants to access GUI items, it either needs to a) go through some locking procedure or b) send a message to the EDT. This generalises to all inter-thread communication: to communicate between threads or use shared resources, there needs to be locking and communication.Coroutines are executed in the EDT as “just another event”. Consider a situation where you have a window with a download button. When the user clicks the button, the EDT will start the click handler associated with the button. If that code were to actually attempt to download the file, the GUI would freeze until the file finished downloading. If a coroutine were started, the button's handler would start an
asyncmethod that would open a socket and then be told that it isn't ready yet. It would then put the socket and a callback into the EDT's loop (GLib.MainLoop). The button's handler would finish and the EDT would sit and wait for an event from the X display or socket, then call the right callback to handle it. That allows GUI events to be processed in an interleaved way with socket events. However, only one handler can be working at a time, so handlers need to be able to finish quickly or the application will be unresponsive.Using coroutines becomes a giant mess of callbacks, but
asyncmethods hide the callbacks so that it looks like straight-line code even though it isn't.If your task is mostly waiting, then coroutines are the right choice. If your task is busy working, then it will undoubtedly need to go in a thread. Courotines can't exceed more than one CPU's work, while threads can be run in parallel on multiple CPUs. GLib's coroutines also can't easily be mixed with threads: it's not sane to try to have
asyncmethods operate independently in two threads: only the EDT gets to useasyncmethods.