线程和进程
作者:互联网
线程和进程都可以让程序并行运行
计算机程序有静态和动态的区别
静态的计算机程序:存储在磁盘上可以执行的二进制文件(或者其他类型)
动态的计算机程序:将可执行文件加载到内存中,并被操作系统调用。
这些动态的计算机程序被称为一个进程,
进程是活跃的,只有可执行程序被调入内存中才称为进程。
每个进程都拥有自己的地址空间,内存,数据栈以及其他用于跟踪执行的辅助数据。
操作系统会管理系统中所有的进程的执行,并为这些进程合理的分配时间。
进程可以派生新的进程来执行其他任务。
每个新进程都拥有自己的内存和数据栈,所以只能采用进程间通信的方式共享信息(IPC)
线程:称为轻量级进程,与进程类似。
线程是在同一个进程下执行,并共享同一个上下文。
线程属于进进程。
线程必须要依赖进程才能执行。
一个进程,可以包含一个或者多个线程。
线程包括:[开始][执行][结束]三部分
线程有一个指令指针,用于记录当前运行的上下文,
当其他线程运行时,当前线程有可能被抢占或临时挂起。[抢占则为中断],[临时挂起则为睡眠]
一个进程中的各个线程与主线程共享同一片数据空间,
比单独的进程,线程间的数据共享和通信更容易,
线程一般是以并发方式执行。
这种并行和数据共享机制,使得多任务之间的协作成为可能。
在单核cpu的系统中,并不存在真正的并发成运行。
所以线程的执行实际上还是同步执行
系统会根据调度算法在不同的时间安排线程执行
先让某个线程在cpu上执行一下,
然后让其他的线程在cpu上执行一下,
通过这种多个线程之间不断切换的方式让多个线程交替执行。
所以在任务管理器上,会看到在单核cpu的系统上看着像有多个线程并发运行一样。所以这个是一个假象.
多线程之间共享数据有风险,
当两个或多个线程访问了同一片数据,
由于数据的访问顺序不同,可能导致结果的不一致,
这种情况通常称为静态条件(static condition)
不过,大多数线程库都有一些机制让共享内存区域的数据同步,
当一个线程访问这片内存区域时,这片内存区域暂时被锁定,
其它的线程只能等待这片内存区域解锁后再访问。
线程的执行时间是不平等的。
如果有6个线程,12秒的cpu执行时间,并不是为了这六个线程平均分配cpu执行时间(每个线程执行2秒),
而是根据线程中具体的执行代码分配cpu计算时间。
如在调动一些函数时,这些函数会在完成之前保存阻塞状态(阻止其他线程获得cpu的执行时间),
这样这些函数就会长时间占用cpu的内存,
系统在分配cpu计算时间时更倾向于这些贪婪的函数。
标签:计算机程序,线程,内存,进程,执行,cpu 来源: https://blog.csdn.net/weixin_47021806/article/details/115471835