操作系统与C语言

本文深入探讨了操作系统的进程与线程状态,包括就绪态、运行态、阻塞态、睡眠态和挂起态。同时,对比了线程、迁程和协程的特点,以及C语言中getch、getchar和kbhit函数的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统五态

程序的一次执行 执行叫做一个进程 : 不是一次执行完 停停走走
(就绪态)改变优先级 调度仍然认为是随机的 随机分配20-200ms的数据 程序交替执行 4条脉冲一个指令 2g/4 = 50000000条
(运行态)
(阻塞态I/O输入)
(睡眠态可以自己醒来)
(挂起态 没有恢复原语 一直死 睡眠可以自己起来 挂机不能自然醒来)

线程 迁程 携程

线程	
是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。
一个进程可以有很多线程,每条线程并行执行不同的任务

迁程
纤程本质上也是线程,是多任务系统的一部分,纤程为一个线程准并行方式调用多个不同函数提供了一种可能,它本身可以作为一种轻量级的线程使用。
它与线程在本质上没有区别,它也有上下文环境,纤程的上下文环境也是一组寄存器和调用堆栈。它是比线程更小的调度单位。注意一般我们认为线程是操作系统调用的最小单位,而纤程相比于线程来说更小。
但是它是有程序员自己调用,而不由操作系统调用。系统在调度线程的时候会陷入到内核态,线程对象本身也是一种内核对象,而纤程完全是建立在用户层上,它不是内核对象也没有对象的句柄。
通过纤程的机制实际就绕开了Windows的随机调度线程执行的行为,调度算法由应用程序自己实现,这对一些并行算法非常有意义。因为纤程和线程本质上的类同性,所以也要按照理解线程为函数调用器的方式来理解纤程

协程  用户态的轻量级的非抢占式的线程
--优点:协程切换的时候开销小,用户态且轻量
非抢占式,不用加很多锁,减小复杂度,不用很复杂的处理线程同步问题
--缺点:协程不能利用多核,只能使用单核,因为同时只有一个协程在运行

getch getchar 和kbhit

ESC的ASCII码的值为27 取消

getch()  屏幕看不到   放到缓冲区中     卡住 提取一个输入一个
getch()是编程中所用的函数,这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性
头文件 conio.h

getchar()	屏幕能看到 放到缓冲区 当用户输入回车后 一次提取一个 
其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键
getchar() 是读入函数的一种。它从标准输入里读取下一个字符,相当于
getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。
头文件 stdio,h

kbhit()功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
c++头文件:conio.h


I/O中一次给getchar/getch一位
kbhit虚拟多线程

牺牲时间带来速度
到底用哪个 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值