Sobes.tech
Middle

What is the difference between asynchrony and multithreading?

sobes.tech AI

Answer from AI

Asynchronous and multithreading are approaches to executing parallel tasks.

  • Multithreading involves creating and executing multiple threads within a single process. Threads run in parallel (on multi-core systems) or pseudo-parallel (on single-core systems through context switching). Suitable for CPU-intensive tasks.

    import threading
    import time
    
    def task(name):
        # Simulate work
        time.sleep(1)
        print(f"Thread {name} finished")
    
    threads = []
    for i in range(3):
        thread = threading.Thread(target=task, args=(i,))
        threads.append(thread)
        thread.start() # Start thread
    
    for thread in threads:
        thread.join() # Wait for thread to finish
    
    print("All threads finished")
    
  • Asynchronous (async) is based on using a single thread (or a small number of threads) with an event-driven architecture. Instead of waiting for a blocking operation (like I/O) to complete, the task "yields" control, allowing other tasks to run, and then "resumes" when the operation is complete. Suitable for I/O-bound tasks.

    import asyncio
    import time
    
    async def async_task(name):
        # Simulate asynchronous blocking operation (e.g., network request)
        await asyncio.sleep(1)
        print(f"Asynchronous task {name} finished")
    
    async def main():
        tasks = []
        for i in range(3):
            task = asyncio.create_task(async_task(i))
            tasks.append(task)
    
        await asyncio.gather(*tasks) # Wait for all async tasks to complete
    
    if __name__ == "__main__":
        asyncio.run(main())
        print("All asynchronous tasks finished")
    

Main differences:

Aspect Multithreading Asyncio
Execution Multiple threads, in parallel or pseudo-parallel Usually one thread with task switching
Model Based on OS threads, preemptive multitasking Based on event loop, cooperative multitasking
Complexity Thread management, locks, GIL (in Python) Coroutine management, await/async
Usage CPU-bound tasks I/O-bound tasks
GIL (Python) Limits real parallelism for CPU-bound code Not an issue for I/O-bound tasks