Multithreaded algorithms allow for concurrent execution of parts of a program using multiple threads. There are two types of threading: static, controlled by the OS, and dynamic, controlled by the program. Dynamic threading uses keywords like spawn to execute parts of a program concurrently and sync to wait for spawned threads to complete. Calculating Fibonacci numbers with a naive recursive approach has exponential time complexity. A parallel version uses spawn and sync to recursively calculate Fibonacci numbers concurrently in different threads, reducing the time complexity. Performance is measured by work, span, speedup and parallelism based on the computation directed acyclic graph.