Majority of modern applications are multithreaded. For instance any mobile application "hello world" level has at least 2 threads: GUI and the thread where main logic is being executed.
The absolute majority of test scenarios can be tested manually and automation should be considered and implemented when investment into automation will provide a benefit, for instance if you have 100 tests and plan to execute them 100 times in upcoming year, it's better to have them automated.
When it comes to performance testing, the main goal is to check how will your application behave under anticipated load. You can make some assumptions by using a profiler tool check application/database logs to see any long-running operations or queries, etc.
However some certain scenarios cannot be tested manually especially edge cases, for instance how your application behaves under prolonged load, what is number of concurrent users when errors start occurring and what kind of errors are they, does the system recover after overwhelming load and if yes how fast, etc. See Why ‘Normal’ Load Testing Isn’t Enough article for more detailed explanation.