进程线程的调度阻塞唤醒
2018-01-05 16:32
453 查看
1Cpu线程调度
1一个CPU最多可以运行一个进程或者一个线程,如果是双核的CPU最多可运行 两个进程或两个线程, 操作系统是多任务操作系统,他不止同时运行两个任务,可能有很多个,如word文档,QQ,音乐,浏览器,等都是一个或多个进程或线程, 如果要跑这个多个进程 每个进程都对应一个应用程序,或里面的线程, 如果有N个这样的线程,那么一个2核的CPU 处理这样的线程, 每一次 一个核只能挂一个线程, 这时候就涉及到调度。2什么是调度怎么调度: OS会给每个进程或线程可调度的单元 一个叫做时间片的东西,根据线程的级别给时间片,每个CPU 执行这个线程时间是根据这个时间片决定的,然后把这个线程挂起,就是暂停,然后这个CPU的核去执行另一个线程 执行完所有线程后,回来又开始执行第一个线程或进程。 每一个线程根据时间片一次进行调度,这样就保证了每个线程都能被执行的到, 人类是感觉不到这个暂停的,因为CPU速度是非常快的,
线程会经常休眠,强制休眠就是 时间片到了,系统给你休眠挂起, 还有就是主动休眠, 例如一个程序窗口
打开后不去动他,他就是休眠状态。
3主动休眠: 比如说 c语言的Read读取文件的函数 调用之后 就会主动休眠,他要等OS 从磁盘里读取文件数据到内存,然后这个线程才会被唤醒,读到文件,满足他继续往下的条件。
4阻塞与唤醒:比如一个网卡,他和OS相连 有很多的SOCKET对象,又有很多的线程,其中的线程就阻塞在这个socket对象上面, 知道OS线程读取到网卡的数据,然后解析到这个socket对象上,这时候就会唤醒这个线程。
相关文章推荐
- 互斥锁与自旋锁的区别(自旋锁不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等。适用场景:锁被持有时间短,并且线程不希望在重新调度上花费太多成本)
- 进程、线程与处理器的调度(转)
- Linux的进程,线程以及调度(fork与僵尸,内存泄漏,task结构体,停止状态与作业控制)
- 0027 Java线程的阻塞与唤醒【基础】
- 进程调度的时机及阻塞
- java线程 - 线程唤醒后并被执行时,是在上次阻塞的代码行重新往下执行,而不是从头开始执行
- SB了,pthread_cond_wait(),在等待的时候会解锁(阻塞之后,解锁mutex给别的线程),唤醒后加锁,
- poll and epoll的区别-linux C线程间通信:阻塞-唤醒-创建文件,重启后大小是0
- 操作系统之进程与线程4——进程调度
- 剖析Android中进程与线程调度之nice
- 进程、线程与处理器的关系和调度
- Linux Kernel调度管理之进程唤醒
- Linux CFS调度器之唤醒抢占--Linux进程的管理与调度(三十)
- java线程阻塞与唤醒
- 报名:《Linux的进程、线程以及调度》4节系列微课(5.22-25)
- linux进程、调度、线程、进程上下文等几点理解
- 操作系统之进程与线程4——进程调度
- linux中进程、线程、调度的一些理解
- python多进程笔记1 - 初步认知:进程,并发并行,算法调度,阻塞非阻塞,异步与同步,锁
- linux进程、调度、线程、进程上下文等几点理解