当前位置: 首页 > news >正文

免费flash网站源码网站怎么在微博推广

免费flash网站源码,网站怎么在微博推广,网站域名删除时间查询,wordpress 数据表 插件文章目录 计算机操作系统面试篇用户态和内核态的区别#xff1f;用户态和内核态的区别#xff1f; 进程管理线程和进程的区别是什么#xff1f;进程#xff0c;线程#xff0c;协程的区别是什么#xff1f;创建一个协程的过程线程运行过程中申请到的东西在切换时是否全部… 文章目录 计算机操作系统面试篇用户态和内核态的区别用户态和内核态的区别 进程管理线程和进程的区别是什么进程线程协程的区别是什么创建一个协程的过程线程运行过程中申请到的东西在切换时是否全部要保存比如线程中有个循环或者声明了很多对象这些是否都要保存也存在线程私有区吗多线程比单线程的优势劣势进程切换和线程切换的区别进程上下文有哪些进程间通讯有哪些方式说一下同步和异步异步过程中谁来通知谁 内存管理堆和栈的区别虚拟内存32位与64位总线的操作系统的理论虚拟内存分段分页对比 中断和异常硬中断、软中断讲一下异常 网络IOBIO、和NIO、AIO区别select、poll、epoll 的区别是什么epoll过程epoll 的 边缘触发和水平触发有什么区别redisnginxnetty 是依赖什么做的这么高性能RedisNettyNginx 零拷贝是什么 计算机操作系统面试篇 用户态和内核态的区别 用户态和内核态的区别 内核态Kernel Mode在内核态下CPU可以执行所有的指令和访问所有的硬件资源。这种模式下的操作具有更高的权限主要用于操作系统内核的运行。用户态User Mode在用户态下CPU只能执行部分指令集无法直接访问硬件资源。这种模式下的操作权限较低主要用于运行用户程序。 进程管理 线程和进程的区别是什么 定义 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位。 调度及切换 每个进程都有独立的代码和数据空间程序上下文程序之间的切换会有较大的开销。线程可以看做轻量级的进程同一类线程共享代码和数据空间每个线程都有自己独立的运行栈和程序计数器PC线程之间切换的开销小。 内存分配 系统在运行的时候会为每个进程分配不同的内存空间。对线程而言除了CPU外系统不会为线程分配内存线程所使用的资源来自其所属进程的资源线程组之间只能共享资源。 稳定性 进程中某个线程如果崩溃了可能会导致整个进程都崩溃。进程中的子进程崩溃并不会影响其他进程。 包含关系 没有线程的进程可以看做是单线程的。如果一个进程内有多个线程则执行过程不是一条线的而是多条线。 进程线程协程的区别是什么 进程是操作系统中进行资源分配和调度的基本单位它拥有自己的独立内存空间和系统资源。每个进程都有独立的堆和栈不与其他进程共享。进程间通信需要通过特定的机制如管道、消息队列、信号量等。由于进程拥有独立的内存空间因此其稳定性和安全性相对较高但同时上下文切换的开销也较大因为需要保存和恢复整个进程的状态。线程是进程内的一个执行单元也是CPU调度和分派的基本单位。与进程不同线程共享进程的内存空间包括堆和全局变量。线程之间通信更加高效因为它们可以直接读写共享内存。线程的上下文切换开销较小因为只需要保存和恢复线程的上下文而不是整个进程的状态。然而由于多个线程共享内存空间因此存在数据竞争和线程安全的问题需要通过同步和互斥机制来解决。协程是一种用户态的轻量级线程其调度完全由用户程序控制而不需要内核的参与。协程拥有自己的寄存器上下文和栈但与其他协程共享堆内存。协程的切换开销非常小因为只需要保存和恢复协程的上下文而无需进行内核级的上下文切换。协程需要程序员显式地进行调度和管理相对于线程和进程来说其编程模型更为复杂。 创建一个协程的过程 使用 CompletableFuture 实现异步协程 在 Java 中CompletableFuture 提供了对异步任务的支持。它允许你定义异步任务并在任务完成时做一些处理从而实现类似协程的效果。 线程运行过程中申请到的东西在切换时是否全部要保存比如线程中有个循环或者声明了很多对象这些是否都要保存也存在线程私有区吗 线程运行过程中申请到的东西如循环中的状态、声明的局部对象等在切换时不需要全部保存。线程切换时操作系统只会保存和恢复线程的上下文信息如栈指针、寄存器、程序计数器等。对于局部变量它们存储在栈中线程切换时会自动保存和恢复。线程私有区中的数据会保留因为它是与线程相关联的。 多线程比单线程的优势劣势 优势 提高程序的运行效率可以充分利用多核处理器的资源同时处理多个任务加快程序的执行速度。 劣势 存在多线程数据竞争访问的问题需要通过锁机制来保证线程安全增加了加锁的开销还有死锁的风险。 进程切换和线程切换的区别 进程切换 进程是由内核管理和调度的所以进程的切换只能发生在内核态。操作系统需要保存当前进程的状态如寄存器值、程序计数器等然后加载目标进程的状态。这不仅包括虚拟内存的切换还包括内核堆栈、文件描述符、信号处理等资源的切换。 线程切换 同一进程中的线程共享相同的 虚拟内存所以内存切换的开销要比进程切换小。线程切换只需要保存和加载线程的上下文如寄存器、栈指针等而不需要切换整个进程的内存空间。 进程上下文有哪些 进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源还包括了内核堆栈、寄存器等内核空间的资源。 进程间通讯有哪些方式 管道pipe用于在同一主机上的进程间传输数据的一种通信方式。通常在父子进程之间使用。 使用内存缓冲区数据写入一端后从另一端读取。 消息队列共享内存不同进程间共享一块内存区域的通信方式允许进程直接读写这块共享内存。 需要使用 信号量 或 互斥锁 等同步机制避免并发访问时出现数据冲突。 信号signal信号是操作系统用来通知进程某个事件发生的一种机制。信号量Semaphore信号量是一种用于同步和控制对共享资源的访问的计数器。它可以被视为一个整数用于表示资源的数量。socket套接字是一种跨网络的进程间通信方式通常用于不同主机之间的通信。它支持面向连接如 TCP和无连接如 UDP通信。支持全双工通信。 说一下同步和异步 同步Synchronous同步是指任务的执行是按顺序进行的后续任务必须等前一个任务完成后才能开始执行。异步Asynchronous异步是指任务的执行不需要等待前一个任务完成任务可以并行执行后续任务可以在前一个任务未完成时开始。 异步过程中谁来通知谁 通常是由事件循环、回调函数或Future对象来“通知”A任务。具体来说A任务可以通过await或回调机制来等待和接收结果。如果A任务依赖于I/O操作或其他异步任务的完成通常会使用上述机制来管理任务状态的切换确保任务完成时能够通知A任务并继续执行后续操作。 内存管理 堆和栈的区别 分配方式堆是动态分配内存由程序员手动申请和释放内存通常用于存储动态数据结构和对象。栈是静态分配内存由编译器自动分配和释放内存用于存储函数的局部变量和函数调用信息。 内存管理堆需要程序员手动管理内存的分配和释放如果管理不当可能会导致内存泄漏或内存溢出。栈由编译器自动管理内存遵循后进先出的原则变量的生命周期由其作用域决定函数调用时分配内存函数返回时释放内存。 大小和速度堆通常比栈大内存空间较大动态分配和释放内存需要时间开销。栈大小有限通常比较小内存分配和释放速度较快因为是编译器自动管理。 虚拟内存 传统内存 一次性作业必须一次性全部装入内存后才能开始运行。驻留性一旦作业被装入内存就会一直驻留在内存中直至作业运行结束。 虚拟内存虚拟内存的最大容量是由计算机的地址结构CPU寻址范围确定的。虚拟内存的实际容量 min{内存和外存容量之和CPU寻址范围}。32位计算机地址结构为4GB。 多次性无需在作业运行时一次性全部装入内存而是允许被分成多次调入内存。对换性在作业运行时无需一直常驻内存而是允许在作业运行过程中将作业换入、换出。虚拟性从逻辑上扩充了内存的容量使用户看到的内存容量远大于实际的容量。 虚拟内存实现有3种方式请求分页存储管理、请求分段存储管理、请求段页式存储管理。 无论哪种方式都需要一定的硬件支持包括一定容量的内存与外存页表机制、段表机制作为主要的数据结构中断机制当用户程序要访问的部分会调入内存时产生中断地址转换机构逻辑地址到物理地址的转换。 32位与64位总线的操作系统的理论虚拟内存 虚拟内存大小min{内存外存总线位数} 32位总线大小为4G Windows 64 位操作系统通常为每个进程分配 8 TB 的虚拟地址空间。 Linux 在 x86_64 架构下默认每个进程可以使用 128 TB 的虚拟内存。 分段分页对比 存储特性 页是信息的物理单位。分页的主要目的是为了实现离散分配提高内存利用率。分页仅仅是系统管理上的需要完全是系统行为对用户是不可见的。段是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。 存储大小 页的大小固定且由系统决定。段的长度却不固定决定于用户编写的程序。 用户进程地址维度 分页的用户进程地址空间是一维的程序员只需给出一个记忆符即可表示一个地址。分段的用户进程地址空间是二维的程序员在标识一个地址时既要给出段名也要给出段内地址。 碎片问题 分页的内存利用率高不会产生外部碎片只会有少量内部碎片。如果段长过大会产生外部碎片。 中断和异常 硬中断、软中断讲一下 硬中断Hardware Interrupt和软中断Software Interrupt是计算机系统中中断机制的两种基本类型它们都是用来打断当前的程序执行转而处理一些重要任务或事件。 硬中断Hardware Interrupt由外部硬件设备发出的信号用来通知CPU有紧急的事件或任务需要处理。 定时器中断CPU通过定时器定期中断自己以便执行操作系统的任务调度。I/O设备中断例如网络接口卡接收到数据包时触发中断通知CPU进行处理。 软中断Software Interrupt软中断是由程序中的软件指令触发的中断它通常用于程序之间的通讯、系统调用或实现某些特定功能。 系统调用用户程序通过触发软中断向操作系统请求资源如文件读写、进程管理等。 异常 异常Exception陷入也成为内中断来自于CPU内部的事件。 如非法操作码、地址越界、算术溢出、虚存系统缺页等等异常不能被屏蔽一旦出现应当立即处理。 网络IO BIO、和NIO、AIO区别 特性BIONIOAIO工作模式阻塞 I/O数据流模式非阻塞 I/O缓冲区 通道 选择器异步 I/O回调通知线程模型每个连接一个线程多个通道由单线程管理通过 Selector异步 I/O无需阻塞或轮询I/O 操作阻塞直到 I/O 操作完成非阻塞可以轮询多个通道的事件异步不会阻塞完成时回调通知适用场景并发连接数少低性能需求高并发、大量连接I/O 密集型应用超高并发、大数据量 I/O 操作性能问题并发连接数多时性能差线程开销大比 BIO 性能好但需要轮询高并发时更有效性能非常高尤其适用于高并发应用 select、poll、epoll 的区别是什么 select select 是最早出现的一种 I/O 多路复用机制它允许在多个文件描述符上监视是否有 I/O 事件发生如可读、可写等。select 调用会阻塞并等待直到文件描述符集中的某个或某些文件描述符准备就绪之后就返回。缺点 文件描述符限制select 限制了每次监视的文件描述符数量通常是 1024可以通过修改编译时的宏来增大但还是有限制。性能问题每次调用 select 都需要遍历所有的文件描述符集合这对于大规模的文件描述符集会导致性能瓶颈。重新设置每次调用 select 时必须重设文件描述符集带来了额外的开销。 poll poll 是对 select 的改进具有与 select 相似的功能但没有文件描述符数量限制。poll 用一个 pollfd 结构体数组来表示多个文件描述符及其事件它返回时会告知哪些文件描述符有 I/O 事件发生。优点 没有文件描述符限制相较于 selectpoll 不再有最大文件描述符数量的限制。动态文件描述符集合poll 可以动态地管理文件描述符集合而不需要像 select 一样每次都重设整个集合。 缺点 性能瓶颈尽管去除了文件描述符的数量限制但 poll 仍然需要遍历整个文件描述符集合每次调用时都需要遍历整个数组这对于大量文件描述符来说性能较差。返回值不够直观poll 只是返回哪些文件描述符有事件发生没有直接告诉应用程序事件发生的位置因此需要遍历 pollfd 数组进行判断。 epoll epoll 是 Linux 中引入的 I/O 多路复用机制是对 select 和 poll 的进一步优化专门为高并发场景设计。epoll 使用事件驱动的机制提供了更高效的事件通知方式。epoll 会通过内核级别的事件通知不需要每次遍历所有的文件描述符只有在某些文件描述符准备就绪时内核才会通知用户进程。优点 无文件描述符数量限制epoll 不受文件描述符数量限制可以处理成千上万的连接。高效的性能epoll 使用基于回调的机制只在事件发生时通知用户程序不需要每次都遍历文件描述符集合。边缘触发和水平触发epoll 支持两种触发模式水平触发Level Triggered和边缘触发Edge Triggered提供了更灵活的控制。内存管理epoll 在内核中维护一个事件通知队列通过 epoll_wait 来通知应用程序哪些文件描述符有事件发生效率较高。 缺点: 只能在 Linux 上使用epoll 是 Linux 特有的系统调用无法在其他操作系统上使用。复杂度较高相较于 select 和 pollepoll 需要更复杂的设置和管理尤其是在使用边缘触发模式时。 epoll过程 lfdsocket()创建lfd套接字—bind()绑定地址—listen()设置监听上限—epoll_create()创建监听红黑树—epoll_ctl()把lfd加入红黑树—while(1) 服务器端上线等待连接。epoll_wait()服务器监听—有事件发生—epoll_wait()返回监听满足数组—一旦有事件发生则lfd一定在满足数组中lfd进行accept()—用lfd进行accept()返回的连接套接字cfd放到红黑树中—执行读操作—进行大小写转换操作—把cfd节点的属性从EPOLLIN变为EPOLLOUT—再把cfd重新挂上红黑树去监听写事件—等待epoll_wait()返回—有返回说明能写—执行写操作—把cfd从红黑树中拿下来—再把cfd节点的属性从EPOLLIN变为EPOLLOUT—再把cfd重新挂上红黑树去监听读事件—epoll_wait()服务器监听。从而形成一个完美的闭环。 epoll 的 边缘触发和水平触发有什么区别 epoll 支持两种事件触发模式分别是边缘触发edge-triggeredET和水平触发level-triggeredLT。 特性水平触发 (LT)边缘触发 (ET)通知方式当文件描述符的事件条件满足时每次调用都会返回只有文件描述符的事件从未就绪变为就绪时才通知一次事件处理只要事件没有处理完epoll 会继续返回该文件描述符事件一旦通知后必须完全处理否则不会再次通知是否重复通知会重复通知直到事件完全处理不会重复通知只有状态变化时才通知一次适用场景适合大多数简单应用处理事件比较慢时使用适合高性能、高并发应用要求迅速处理事件性能性能较低重复通知会增加开销性能较高因为不重复通知实现难度简单容易实现稍复杂要求处理得当否则可能错过事件通知 使用水平触发模式当内核通知文件描述符可读写时接下来还可以继续去检测它的状态看它是否依然可读或可写。使用边缘触发模式I/O 事件发生时只会通知一次而且我们不知道到底能读写多少数据所以在收到通知后应尽可能地读写数据以免错失读写的机会。因此我们会循环从文件描述符读写数据那么如果文件描述符是阻塞的没有数据可读写时进程会阻塞在读写函数那里程序就没办法继续往下执行。所以边缘触发模式一般和非阻塞 I/O 搭配使用程序会一直执行 I/O 操作直到系统调用返回错误错误类型为 EAGAIN 或 EWOULDBLOCK。 redisnginxnetty 是依赖什么做的这么高性能 主要是依赖Reactor 模式实现了高性能网络模式这个是在i/o多路复用接口基础上实现的了网络模型。 Reactor 模式主要由 Reactor 和处理资源池这两个核心部分组成它俩负责的事情如下 Reactor 负责监听和分发事件事件类型包含连接事件、读写事件处理资源池负责处理事件如 read - 业务逻辑 - send Redis Redis 6.0 之前使用的 Reactor 模型就是单 Reactor 单进程模式。 因为只有一个进程无法充分利用 多核 CPU 的性能Handler 对象在业务处理时整个进程是无法处理其他连接的事件的如果业务处理耗时比较长那么就造成响应的延迟 单 Reactor 单进程的方案不适用计算机密集型的场景只适用于业务处理非常快速的场景。所以Redis的瓶颈不在CPU上网络IO才是瓶颈。 因此在Redis6.0后Redis 在启动的时候默认情况下会额外创建 6 个线程这里的线程数不包括主线程 Redis-server Redis的主线程主要负责执行命令。bio_close_file、bio_aof_fsync、bio_lazy_free三个后台线程分别异步处理关闭文件任务、AOF刷盘任务、释放内存任务io_thd_1、io_thd_2、io_thd_3三个 I/O 线程io-threads 默认是 4 所以会启动 34-1个 I/O 多线程用来分担 Redis 网络 I/O 的压力。 Netty Netty 是采用了多 Reactor 多线程方案 每个客户端通过通道Channel与服务端进行数据交互客户端通过端口向服务端发送连接请求。服务端使用一个线程通过多路复用器Selector来监听多个客户端的连接请求和数据事件服务端会将每个客户端的通道注册到 Selector 上进行管理。 主线程和子线程分工明确主线程只负责接收新连接子线程负责完成后续的业务处理。主线程和子线程的交互很简单主线程只需要把新连接传给子线程子线程无须返回数据直接就可以在子线程将处理结果发送给客户端。 Netty特点 事件驱动和异步机制通过回调机制处理I/O结果boss-workerboss只负责管理具体处理交给worker还有更加智能的线程管理内存管理优化采用内存池化区别于传统每次读取都会分配新的字节数组支持多种协议不仅有tcp、udp还有http、https、websocket等等 Nginx nginx 是多 Reactor 多进程方案不过方案与标准的多 Reactor 多进程有些差异。 主进程中仅仅用来初始化 socket并没有创建 mainReactor 来 accept 连接由子进程的 Reactor 来 accept 连接通过锁来控制一次只有一个子进程进行 accept为了避免多个子进程同时响应同一个请求也就是惊群现象子进程 accept 新连接后就放到自己的 Reactor 进行处理不会再分配给其他子进程。 零拷贝是什么 传统 IO 的工作方式从硬盘读取数据然后再通过网卡向外发送我们需要进行 4 上下文切换和 4 次数据拷贝其中 2 次数据拷贝发生在内存里的缓冲区和对应的硬件设备之间这个是由 DMA 完成另外2 次则发生在内核态和用户态之间这个数据搬移工作是由 CPU 完成的。 零拷贝技术它通过一次系统调用sendfile 方法合并了磁盘读取与网络发送两个操作降低了上下文切换次数。另外拷贝数据都是发生在内核中的天然就降低了数据拷贝的次数。使用 sendfile()内核直接将文件内容从磁盘缓冲区传输到网络接口无需通过用户空间。 适用场景 Web 服务器在 Web 服务器中零拷贝可以用来提高大文件如视频、图片等的传输效率。例如Nginx 使用了 sendfile() 实现零拷贝。高性能网络应用零拷贝特别适用于需要频繁进行大规模数据传输的应用如文件传输、数据库备份、视频流等。数据库管理系统数据库的磁盘和网络传输操作常常使用零拷贝技术以提高数据读取和写入的效率。
http://www.tj-hxxt.cn/news/231806.html

相关文章:

  • 海外网站空间免费1级做爰片免费网站
  • 网站搭建前景网站源代码购买
  • 哪里有html企业网站模板下载北京传媒公司排行榜
  • 怎么查看网站的外链众筹网站开发分析报告
  • 重庆綦江网站建设网站建设优化收费
  • 网站制作关键词教人做饮料的网站
  • 推广展示类网站百度小说排行榜2021
  • 河南映天建设网站网站改版建设原则
  • 网站内做二级目录做django后台网站
  • 关于学院网站建设的通知深圳sem竞价托管
  • 网站模板中企动力wordpress怎么给产品设置分类
  • 品牌策划与设计机构佛山搜索引擎优化
  • 外国网站建站小程序商城装修
  • 央企门户网站哪家做的最好公众号怎么做文章
  • 用什么软件做公司网站wordpress+推荐插件
  • 简单的网站大学生创新创业大赛英文
  • dns 部分网站打不开十个免费域名
  • 鲜花网站建设店外链工具xg
  • 滕州 网站 建设电商网站建设思路
  • 网站建设创新点it运维工资
  • 社保代缴网站开发网站维护费
  • 做我的世界头像的网站广州最新新闻
  • iis 5 新建网站wordpress 插件 升级
  • 不同类型网站栏目设置区别整站优化关键词排名
  • 网站发帖功能怎么做金融公司网站制作
  • 做课件的软件下载带有蓝色的网站天津网站建设外包
  • 网站建设策划方案模板电子商务网站推广的方法有哪些
  • 昆明网站建设公司哪家好中国工程局人才招聘网
  • qq排名优化网站crm客户关系管理软件
  • 海珠五屏网站建设wordpress 调用page