?Also you could also be kind and differentiate concurrency from parrallelism
First, for (b), unlike previously stated these are _not_ the same thing. Parallelism is when two threads of execution are being evaluated simultaneously. This requires hardware and OS support in the form of a multi-core CPU or multiple CPUs and OS support for exposing these hardware features to applications.
Concurrency is when two threads of execution can both make progress. Basically, concurrency is the equivalent of "is there more than 1 thread" while parallelism is "can more than 1 thread actually run at the same time." Parallelism is for performance while concurrency is for correctness.
This is important because in a multi-tasking OS you can have concurrency without parallelism. For instance, the OS might be _cooperatively_ multi-threaded (meaning the threads have to explicitly say when another thread can run) or the OS might pre-emptively multitask on a single core (e.g., how threads work when you have more thread than you have cores).
For game developers particularly, this distinction is important because naive programmers will make too many threads, not realizing that they're over-saturating the hardware. A multi-threaded algorithm is not magically faster than a single-threaded algorithm; in fact, the overhead of trying to support multiple threads usually makes code _less_ efficient. Multi-threading only helps raw performance when (a) you have at least as many cores as you have busy threads and (b) the cost of transmitting data and signaling threads is swamped by the cost of the work actually performed by the threads.
Basically, don't use the "one thread per task" model. Instead, use a worker thread (aka "job system" or "task system") model, and be sure to only create jobs/tasks for non-trivial work. For instance, if you have a parallel_for algorithm (execute a block of code N times), you should only kick off jobs for other threads if N is greater than the number of threads times some threshold. Otherwise, the cost of creating the data structures and signaling the other threads will take longer than just running a plain loop in the original thread.
?I would like to know where concurrency is useful in video games ... and why?
The "why" mostly comes down to being "pretty much all CPUs today have multiple cores and you're throwing all that processing power away if you aren't using threads."
The "where" boils down to several broad categories. One is: anywhere that you have a lot of non-interdependent data to process. For instance, your AI example. If you have 1,000 Goombas in a level and all they have to do is decide whether to walk left or right, you could split up that big job of "update 1,000 Goombas" into two separate jobs of "update 500 Goombas" and run those on two cores, potentially doubling the speed of your AI (in practice you'll never actually scale that perfectly).
Not that I said non-interdependent. _Synchronizing_ threads is very, very expensive - mutexes will stall (stop) a thread and even atomics have a measureable overhead. You want to _avoid synchronization_. If object A can affect object B, it is necessary for object B to receive inputs from object A. If they're being updated on two separate threads, that requires some form of synchronization.
Now, there are _many_ ways to solve these kinds of problems that still works with threading (e.g. multi-pass algorithms), but those solutions are _more difficult_. If you're a hardcore game developer who's set out to be excellent at their craft, difficulty won't scare you away... but if you're just trying to ship a fun game, you have to prioritize which difficult problems you're going to spend your time on. It may be that your AI or rendering or the like is more valuable for your game that a fancy job/task system architecture.
That said, such architectures are popular because there's _many_ places it's useful. Take rendering, for instance: object culling is mostly non-interdependent. You "just" have to iterate through some spatial data structure and test each branch to see if it's within the frustrum and not obscured. If you have potentially tens of thousands of objects, splitting those up into some larger clumps and distributing those tests over 4 cores is a huge win.
Physics can likewise gain, though parallelizing physics is _hard_. Granted, most people don't write their own physics engine and just use Havok or Box2d or whatever, so you don't have to worry too much about that.
AI can gain, as you conjectured. UI rendering is often very complicated and there's a lot of "easy" gains there with parallelism (e.g., calculating UI layout while other tasks in the engine are executing).
The "where" question does come down to some other broad categories. Latency is a big one where concurrency can be a huge win even if you lack parallelism (e.g., using threads is good even if you don't have enough cores). Audio is the classic example, as audio buffers have to be processed frequently independent of what else the game is doing. If you have particularly complicated algorithms that cannot easily be broken down into smaller tasks, it might be beneficial to move those off to their own threads in order to avoid pauses or hitches in your game.
Really, though, the best (and much shorter) answer is probably that all CPUs are gaining cores faster than they're gaining hertz, so multi-threading is mandatory to squeeze more performance out of newer hardware. Resource IO is an example here; many OSes force a thread that makes an IO request to stall and wait, so in order to keep your game presenting frames smoothly you have to make those IO requests on a separate thread. This can be a case where concurrency without parallelism still wins (because the extra threads aren't actually _working_ or taking up time on your CPU).
For example, the XBox 360 has three hyper-threaded cores that run at 3.2 GHz, while the XBox One has two four-core APU modules running at 1.7 GHz, yet there's little debate that the XBone is the more powerful hardware. Granted, there are _many_ other factors at play and direct comparisons are very very complicated (buses, memory, instruction set, quality of architecture, etc.) but the "8"-core XBone handily beats the "3"-core XB360 (quotes because both CPUs share various computation resources between threads; the XBone's CPU "shares less" though so I'm considering its two quad-core modules as eight full cores, while the XB360's hyper-threaded cores share far more so I'm not counting each core as two like some marketing material likes to do).