知识点总结:
1、进程和线程的区别:进程官方的讲进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序值的值和处理寄存器的内容来表示。通俗来讲,运行着的程序就可以看做一个进程。而线程呢,有时被称为轻量级进程,是程序执行流的最小单元,进程的功能可以用线程实现。用通俗来讲,一个程序必须有一个进程,一个进程则必须有一个线程,从哲学层次来讲,进程是躯干,线程是灵魂,躯干是不能自己动的,所以只有给躯干注入灵魂,躯干才能实现自己想要的功能。
2、Linux上五大I/O模型:阻塞I/O模型,非阻塞I/O模型,I/O复用模型,信号驱动,异步I/O模型。以后做个专门的博文写这个。
3、系统I/O模型一般有CPU I/O,磁盘I/O,网络I/O,
一般有两个状态,分为等待就绪和数据操作两个状态,而等待就绪又分为两个状态,阻塞和非阻塞,
阻塞:数据没准备好,所有被阻塞住了,然后非阻塞的意思是就是虽然数据没准备好,但是不阻塞。
然后数据操作就分为同步和异步,同步:内核给应用上报的是读写就绪时间,然后应用就去读,
异步:内核给应用上报的是读写完成事件。所以poll/epoll/select是同步的,传的参数是fd和感兴趣的方向,
异步传的是fd,用户的缓冲区,以及以信号的方式通知应用读写完成。
4、服务器模型:BIO,NIO,AIO
BIO:(block)阻塞I/O,同步阻塞模型,优点是编码简单,但是一个线程只为一个用户服务,线程多会导致的问题:1> 销毁线程代价高 2>创建线程需要系统申请额外资源, 3>线程之间切换时间大于本身的活动的时间,4> 锯齿状的负载,峰值高的地方,系统唤醒任务多,会出现惊群现象,CPU的利用率太高了,
NIO:同步非阻塞模型,用的是I/O复用技术,多线程,
典型的模型:epoll/ liseten /read/write/ 监听多个任务
AIO:异步非阻塞模型
BIO------》NIO -------》AIO 代码越难实现,效率高。