43 lines
1.5 KiB
Markdown
43 lines
1.5 KiB
Markdown
![]() |
---
|
||
|
id: zadl
|
||
|
tags: [operating-systems]
|
||
|
created: Wednesday, June 26, 2024
|
||
|
---
|
||
|
|
||
|
# Threads
|
||
|
|
||
|
A  is a running instance of a given program. A program
|
||
|
runs sequentially handling one task at a time, however we may need to run
|
||
|
certain tasks in parallel.
|
||
|
|
||
|
Think of a program that is downloading a resource from the internet and wants to
|
||
|
update the UI at the same time to show the download process.
|
||
|
|
||
|
If the program is strictly sequential, once the program starts the download, the
|
||
|
UI is neglected since the CPU time dedicated to the process must be focused
|
||
|
elsewhere.
|
||
|
|
||
|
We need the UI update and the download to execute in parallel. This is achieved
|
||
|
via operating system **threads of execution**.
|
||
|
|
||
|
> A thread is a schedulable unit of execution within a process. It runs within a
|
||
|
> process, shares its memory address and can execute any program code loaded
|
||
|
> within it.
|
||
|
|
||
|
Each thread has an identifier called a _thread ID_ (TID).
|
||
|
|
||
|
Both procesess in [user space](User_Space.md) and the [kernel](The_kernel.md)
|
||
|
utilise threads.
|
||
|
|
||
|
## Hardware considerations
|
||
|
|
||
|
Each [processor core](./CPU_architecture.md) can only run one thread at a time
|
||
|
so the number of cores that a device's CPU has deterimines how many threads can
|
||
|
run at once. In practice, then, the CPU shuffles between multiple threads in
|
||
|
[clock segments](./Clock_signals.md). This is known as scheduling and is managed
|
||
|
by the process that the thread belongs to.
|
||
|
|
||
|
## Related notes
|
||
|
|
||
|

|