多线程初识

操作系统:
1.硬件
2.软件

硬件:

硬件组成:冯诺依曼体系结构(普利斯顿体系结构)——>二进制

输入设备:键盘,麦克风,手写板
输出设备:音效,显示器
存储:内存,磁盘
CPU:

注意事项:CPU和输入设备或输出设备之间不能直接交互,必须依靠中间的存储部分
内存和磁盘的区别:
1.内存读写速度要远远大于磁盘,内存读写速度是纳秒级别的,硬盘读写速度微秒级别的。
2.内存的价格远大于磁盘
3.内存中的数据不能持久化,电脑重启之后数据就没了;而磁盘的可以持久化

软件:

进程:一个执行任务就是一个进程。
可执行任务(.exe)不等于进程
PID是进程的身份ID,但是重启之后PID就变了
进程的本质:
PCB(进程管理模块)的结构体

PCB:

1.PID(主键ID,身份标识)
2.状态信息(就绪,运行,阻塞,终止)
3.优先级
4.记账信息(防止CPU资源分配不均)
5.一组指针(需要使用的资源)
6.上下文(当分配到CPU资源时执行,然后没有CPU资源之后,暂时保存自己当前的状态,等待下一次执行,这个过程叫一个上下文)

时间片:任务执行的一小段时间

程序的运行:

**并发:只有一个资源,轮流执行,就叫并发运行
**并行:所有应用一起运行,就叫并行运行

内核态和用户态:
用户程序的权限最低,称用户态
权限最高称内核态

总结:

硬件决定了软件的编写

OS:管理软件->

1.描述
2.组织

管理类型:管理软件,管理硬件
职责管理:对外管理(用户部分),对内管理(内核)

进程:进程是操作系统分配资源的最小单位。
内核部分产生一个由双向链表组成的PCB(进程管理模块)
进程的属性:

1.PID(主键ID,身份标识)
2.状态信息(就绪,运行,阻塞,终止)
3.优先级
4.记账信息(防止CPU资源分配不均)
5.一组指针(需要使用的资源/ 进程占用的资源)
6.上下文(当分配到CPU资源时执行,然后没有CPU资源之后,暂时保存自己当前的状态,等待下一次执行,这个过程叫一个上下文)

并发;从宏观角度来看是一起执行的,从微观的角度来看是轮流执行的
并行:所有应用一起运行

最早的并发编程是多进程并发编程。
多个进程不能共享资源

线程:系统调度资源的最小单位,包含在进程之中
线程和进程的区别:
线程是进程执行的最小单位,也是进程执行的时间单位
一个进程中最少包含一个线程;线程必须依附进程之中
进程好比一个工厂,线程好比一个一个流水线
进程是系统分配资源的最小单位,而线程是系统调度的最小单位
进程不可以共享资源,而线程可以共享资源

单进程多线程:占用资源更少,
线程可以共享的资源:

1.打开的文件
2.内存(对象)

线程不可共享的资源:

——上下文,
——记账信息,
——状态
——线程栈信息
——优先级

线程的数量注意事项:
线程的数量不是越多越好
当线程的数量刚好达到某个合适的值是最好的,如果有太多线程就会出现线程之间的争抢和CPU过度调度的问题,而CPU调度是需要消耗资源的,所以线程不是越多越好

那多少线程是最好的:
答:要看具体的应用场景
密集计算的CPU任务,IO(文件读写)型任务
当使用的场景是计算型任务时,线程数量等于CPU的数量是最好的,IO型任务理论上线程数量越多越好。

并发编程:
进程->线程(轻量级的进程)->协程(轻量级的进程):golang(谷歌)

你可能感兴趣的:(网络)