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 best solutions below
Related Questions in MULTITHREADING
- new thread blocks main thread
- WPF MessageBox Cancel checkbox check
- How to avoid concurrent access to a resource?
- run oncomplete event in async
- Threading Segfault when reading members
- Function timeouts in C and thread
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Acumatica perfomance with threads
- Wait and Notify in Java threads for a given interval
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
- How to return blocking queue to the right object?
- background thread using Task.Run
- deletion and cleanup of worker thread in Qt crashes
- Pipeline-like operation using TChan
- implementing in app purchase on android
Related Questions in ASYNCHRONOUS
- Run a loop over a callback, node js
- run oncomplete event in async
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Node JS Async Response
- ajax async: true statement execution order
- Need help making this translation function work with an array input
- How to check in an (Android) async task if the activity it was called from was finished?
- Async vs Horizontal scaling
- Task await fails
- Having two sequential steps running within a windows service
- Would async/await provide benefit over Task for intertwined statements?
- What is the best way to make two web pages communicate between each other back and forth?
- Get result from async closure - Unexpected found nil while unwrapping an Optional value
- Nested asynchronous calls using AngularJS
- Telerik Report Viewer don't work with jquery async: false
Related Questions in VALA
- Async Function in Vala - Yield & Callback
- About good practice for GLib.Application and Soup.Server
- Ubuntu compile Vala for Windows
- Multiple fields in one line
- Return int reference in vala
- Vala: Understanding Struct Properties in Classes
- GtkStyleProvider - providing own implementation
- Inheriting interface in Vala - incompatible with base method
- How to determine present operating system (including specific distribution in the case of Linux) in a Vala program?
- Hiding transition in Gtk
- Custom GTK widget with Vala
- how to remove the -j9 option from the build process in gnome-builder
- Vala: MySQLprogram not compiling
- Vala generates deprecated warnings for higher GTK/GDK Versions
- destroying a class instance doesn't kill instances it owns in vala
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)
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?
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.