网站换一家做还用备案么,网站怎么添加滤镜功能吗,郑州做网站元辰,湘潭做网站价格 d磐石网络1 同步、异步
1.1 同步
代码顺序执行#xff0c;完全由用户控制. 同步阻塞 等待可读、可写的时候阻塞#xff0c;不让出cpu。读、写之后#xff0c;下面的代码才能执行、 同步非阻塞 等待可读、可写时#xff0c;不会阻塞cpu#xff0c;返回失败#xff0c;设置错误码为…1 同步、异步
1.1 同步
代码顺序执行完全由用户控制. 同步阻塞 等待可读、可写的时候阻塞不让出cpu。读、写之后下面的代码才能执行、 同步非阻塞 等待可读、可写时不会阻塞cpu返回失败设置错误码为EAGAIN 或 EWOULDBLOCK 告知应用程序此时没有数据可读用户需要自行决定怎样等待数据到来。
可以轮询
可使用epoll为fd注册读事件然后去执行其它操作。
1.2 异步
代码不按照顺序执行不完全由用户控制。
异步的实现方式 异步库和异步框架libevent、ibuv、libev等 操作系统异步io接口 c11异步机制std::async 和 std::future 异步IO库大概逻辑 将套接字设置为非阻塞状态然后为套接字的事件绑定回调函数接下来进入IO多路复用的循环等待事件发生调用对应的回调函数。
2 进程、线程、协程
进程是操作系统进⾏资源分配的基本单位每个进程都有⾃⼰的独⽴内存空间
线程是cpu调度的基本单位线程共享父进程的虚拟地址空间
协程是用户态线程协程通常在线程中运行
2.1 切换上下文 进程 cpu上下文——寄存器
内存管理上下文——页表相关
资源管理上下文——文件句柄等
同步机制上下文——锁、信号量等 线程 线程切换不需要切换虚拟地址空间
只需要切换cpu寄存器上下文和少量的资源管理上下文。 协程 部分cpu寄存器,
如当前调用栈栈基地址、代码的执行位置等当前的上下文保存到线程的堆区。
2.2 多进程/线程/协程 多进程 fork()创建子进程子进程拷贝父进程地址空间写时复制代码段相同执行任务相同。
exec 系列函数可以在子进程中加载新的可执行程序将子进程的代码替换为新程序的代码。这样子进程将执行与父进程不同的任务。 多线程 父进程创建多个线程每个线程有自己的入口函数执行不同的任务。多个线程共享父进程的资源。 协程 每个协程由自己的入口函数执行不同的任务。
协程通常是在单线程中运行的协程可以在线程中实现切换开销比线程和进程切换小可以实现高并发。
协程经常与多线程一起使用。
3 协程优缺点 协程优点 轻量级创建和销毁开销小占用资源少
高并发协程切换开销小速度快可同时处理更多的协程实现高并发。协程切换在线程中进行由用户控制避免了线程切换的开销。 不是很理解
简化异步编程使用类似于同步编程的方式编写异步代码避免避免了回调函数嵌套和复杂的并发控制逻辑使得代码更加清晰和易于理解。 缺点 ⽆法利⽤多核资源线程才是系统调度的基本单位单线程下的多协程本质上还是串⾏执⾏的只能⽤到单核计算资源所以协程往往要与多线程、多进程⼀起使⽤。
难以调试由于协程的切换和异步执行调试协程代码可能更加困难。当协程之间存在复杂的依赖关系和交互时追踪问题的根因可能变得复杂。
4 协程适用于I/O密集型任务的原因
I/O密集型任务通常涉及等待外部资源等待的过程中需要释放cpu切换到其它任务。协程切换快速开销小。
使用线程的话线程阻塞等待IO会切换到其它线程切换开销比协程大。 单核 不管使用多线程还是协程都只能串行处理。
如果是cpu密集型任务多线程和协程区别不大因为不会频繁因为阻塞切换
如果是io密集型任务需要经常切换协程切换效率更高。 多核 多线程的优势就是可以利用多核处理器而协程只能在一个线程上运行。
IO密集型任务使用多线程协程
5 协程实现的是真正的异步吗
可以实现异步效果但本身并不是异步机制。
本项目中当一个协程等待io时可以切换到其他协程。当io完成后它可以被唤醒并继续执行。这种方式可以让程序在等待I/O的同时执行其他任务充分利用 CPU 资源从而达到类似于异步的效果。这并不是真正的异步。
异步编程中 各个任务是解耦的某个任务被阻塞只影响该任务本身不影响其它任务的执行。
而多线程或协程中 任务间仍有一些资源是共享的当一个线程或协程阻塞或出现异常可能会影响整个进程的执行。
6 衡量⼀个协程库性能的标准 响应时间 衡量在给定负载下协程调度的快慢。较低的响应时间表示更⾼的性能。 吞吐量 指在单位时间内执⾏的任务数量。较⾼的吞吐量表示更⾼的性能。 并发能⼒ 指同时处理的协程数量。更⾼的并发能⼒表示更好的性能。 上下⽂切换开销 在协程库中上下⽂切换是指从⼀个协程切换到另⼀个协程的操作。较低的上下⽂切换开销表示更⾼的性能因为过多的上下⽂切换会浪费时间和资源。 资源利⽤率 ⼀个好的协程库应该有效地利⽤系统资源例如处理器、内存和⽹络等。协程库在资源利⽤⽅⾯的优化程度可以影响性能。 7 Go协程
8 C协程
9 为什么要有空闲协程
在任务队列为空时阻塞在idel协程中的epoll_wait中。
idel协程负责使用epoll监听事件实际发生后将对应回调函数添加到调度队列中。
调度协程只负责任务调度。
降低不同功能之间的耦合便于后序扩展和维护。
10 每建⽴⼀个⽤户连接就要创建⼀个协程不会影响性能吗 会的高并发时会有大量的协程创建和销毁会占用较多系统资源。
可使用协程池的方法解决。
11 怎样测试的
12 简单介绍项目