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

杭州做网站哪家公司好123网址之家118

杭州做网站哪家公司好,123网址之家118,新公司名称取名,seo公司排名榜1、请你说说进程和线程的区别 1.进程是操作系统资源分配和调度的最小单位#xff0c;实现操作系统内部的并发#xff1b;线程是进程的子任务#xff0c;cpu可以识别、执行的最小单位#xff0c;实现程序内部的并发。 2.一个进程最少有一个线程或有多个#xff0c;一个线程…1、请你说说进程和线程的区别 1.进程是操作系统资源分配和调度的最小单位实现操作系统内部的并发线程是进程的子任务cpu可以识别、执行的最小单位实现程序内部的并发。 2.一个进程最少有一个线程或有多个一个线程只能属于一个进程线程依赖于进程存在 3.进程有独立的地址空间线程有自己的堆栈和局部变量多个线程可以共享同一地址空间。 4.进程的创建、切换、销毁的系统开销都远大于线程。创建或销毁进程时系统要分配或回收相应的地址空间和io资源。切换时要保存整个cpu环境还要配置新环境。而线程切换只保留少量寄存器内容。 5.线程间的通信方式很简单因为它们共享了地址空间。但是要保证互斥、同步的操作保证数据的一致性。 6.一般一个进程挂掉并不会影响别的进程但是一个线程挂掉它所在的进程也会挂掉。 2、请你说说线程和协程的区别了解 1. 线程是操作系统的资源线程的创建、切换、停止等都非常消耗资源而创建协程不需要调用操作系统的功能编程语言自身就能完成所以协程也被称为用户态线程协程比线程轻量很多  2. 线程在多核环境下是能做到真正意义上的并行而协程是为并发而产生的  3. 一个具有多个线程的程序可以同时运行几个线程而协同程序却需要彼此协作的运行  4. 线程进程都是同步机制而协程则是异步  5. 线程是抢占式而协程是非抢占式的所以需要用户自己释放使用权来切换到其他协程因此同一时间其实只有一个协程拥有运行权相当于单线程的能力  6. 操作系统对于线程开辟数量限制在千的级别而协程可以达到上万的级别。 3、请你说说线程的同步通信方式 因为多线程共享了同一片地址空间所以线程间通信很简单只需要将数据复制到共享全局或堆变量中即可。不过要考虑同步和互斥保证数据的一致性。用到的技术有 1.信号Linux 中使用 pthread_kill() 函数对线程发信号 2.互斥锁、读写锁、自旋锁。 互斥锁mutex——保证同一时间只能有一个线程访问共享资源当锁被占用时别的线程试图加锁都会进入阻塞状态释放cpu资源使其从运行进入阻塞状态当锁被释放时调度哪个线程取决于内核的调度。 读写锁rwlock——读共享写互斥。写模式加锁时其他不论读写试图加锁都阻塞。读加锁时读进程不阻塞写进程阻塞。 自旋锁spinlock——自旋锁上锁受阻时它不会阻塞而是循环中轮询是否能获得锁所以它不涉及线程切换所以没有切换开销但是它霸占了cpu会浪费cpu资源。所以自旋锁适合并行结构多处理器或者锁被短时间持有又不希望有线程切换开销的情况。 3.条件变量条件变量始终与互斥锁一起使用。条件变量以原子的方式阻塞进程直到达到某一特定条件对条件的判断也是在互斥锁的保护下进行的。 4.信号量信号量实际是一个非负的整数计算器用于对公共资源的控制。公共资源增加信号量加1减少减1。并且只有信号量的值大于0的时候才可访问。 p是对信号量的值进行原子减一代表获取资源当信号量的值为0时p操作会阻塞意味着资源不可用。 v操作是对信号量的值进行原子加一代表释放资源v操作从不阻塞。 4、请你说说互斥锁和自旋锁参考3 5、请你说说写时拷贝 fork 在进行 fork 复制进程时并不马上进行父进程的地址空间的完全拷贝。而是使用了写时拷贝 Copy-On-Write 技术即就是让父进程和子进程共享父进程的页面当父进程或子进程中任意一个 进程试图修改某个页面时再将其拷贝一份给子进程。这样可以延迟页面拷贝提高 fork 复制的效 率。另外通常 Linux 中的新进程都是通过 forkexec 实现的如果 fork 后需要执行 exec 那么直接就不需要拷贝了。 这里有一个小细节 fork 之后内核会将子进程排在队列的前面以让子进程先执行以免父进程执行导 致写时复制而后子进程执行 exec 系统调用因无意义的复制而造成效率的下降。 vfork 除了子进程必须要立刻执行一次对 exec 的系统调用或者调用 _exit( ) 退出对 vfork( ) 的成功调 用所产生的结果和fork( ) 是一样的。 vfork( ) 会挂起父进程直到子进程终止或者运行了一个新的可执行文 件的映像。通过这样的方式vfork( ) 避免了地址空间的按页复制。在这个过程中父进程和子进程共享 相同的地址空间和页表项。实际上vfork( ) 只完成了一件事复制内部的内核数据结构。因此子进程也 就不能修改地址空间中的任何内存。 6、请你说说分段和分页 1、段主要为了内存独立/隔离有利于共享 2、页与物理内存映射解决碎片问题提升效率 3、找到段找到页表起始地址找到页帧号得到物理地址 7、请你介绍一下 I/O 多路复用 io复用使得一个程序能监听多个文件描述符提高程序的性能。 Linux系统实现io复用的技术有selectpollepoll 8、说一说 select 、poll、epoll 1. 用户态将文件描述符传入内核的方式 2. select 创建 3 个文件描述符集并拷贝到内核中分别监听读、写、异常动作。这里受到单个进程可以打开的fd 数量限制默认是 1024 。 poll 将传入的 struct pollfd 结构体数组拷贝到内核中进行监听。 epoll 执行 epoll_create 会在内核的高速 cache 区中建立一颗红黑树以及就绪链表 ( 该链表存储已经就绪 的文件描述符) 。接着用户执行的 epoll_ctl 函数添加文件描述符会在红黑树上增加相应的结点。 内核态检测文件描述符读写状态的方式 select 采用轮询方式遍历所有 fd 最后返回一个描述符读写操作是否就绪的 mask 掩码根据这个掩码给fd_set 赋值。 poll 同样采用轮询方式查询每个 fd 的状态如果就绪则在等待队列中加入一项并继续遍历。epoll 采用回调机制。在执行 epoll_ctl 的 add 操作时不仅将文件描述符放到红黑树上而且也注册了回调函数内核在检测到某文件描述符可读/ 可写时会调用回调函数该回调函数将文件描述符放在就绪链表中。 3. 找到就绪的文件描述符并传递给用户态的方式 select 将之前传入的 fd_set 拷贝传出到用户态并返回就绪的文件描述符总数。用户态并不知道是哪些文件描述符处于就绪态需要遍历来判断。 poll 将之前传入的 fd 数组拷贝传出用户态并返回就绪的文件描述符总数。用户态并不知道是哪些文件描述符处于就绪态需要遍历来判断。 epoll epoll_wait 只用观察就绪链表中有无数据即可最后将链表的数据返回给数组并返回就绪的数量。内核将就绪的文件描述符放在传入的数组中所以只用遍历依次处理即可。这里返回的文件描述符是通过mmap 让内核和用户空间共享同一块内存实现传递的减少了不必要的拷贝。 4. 重复监听的处理方式 select 将新的监听文件描述符集合拷贝传入内核中继续以上步骤。 poll 将新的 struct pollfd 结构体数组拷贝传入内核中继续以上步骤。 epoll 无需重新构建红黑树直接沿用已存在的即可。 epoll 更高效的原因 1. select 和 poll 的动作基本一致只是 poll 采用链表来进行文件描述符的存储而 select 采用 fd 标注位来存放所以select 会受到最大连接数的限制而 poll 不会。 2. select 、 poll 、 epoll 虽然都会返回就绪的文件描述符数量。但是 select 和 poll 并不会明确指出是哪些文件描述符就绪而epoll 会。造成的区别就是系统调用返回后调用 select 和 poll 的程序需要遍历监听的整个文件描述符找到是谁处于就绪而epoll 则直接处理即可。 3. select 、 poll 都需要将有关文件描述符的数据结构拷贝进内核最后再拷贝出来。而 epoll 创建的有关文件描述符的数据结构本身就存于内核态中系统调用返回时利用mmap() 文件映射内存加速与内核空间的消息传递即epoll 使用 mmap 减少复制开销。 4. select 、 poll 采用轮询的方式来检查文件描述符是否处于就绪态而 epoll 采用回调机制。造成的结果就是随着fd 的增加 select 和 poll 的效率会线性降低而 epoll 不会受到太大影响除非活跃的socket很多。 5. epoll 的边缘触发模式效率高系统不会充斥大量不关心的就绪文件描述符虽然 epoll 的性能最好但是在连接数少并且连接都十分活跃的情况下select 和 poll 的性能可能比 epoll 好毕竟 epoll 的通知机制需要很多函数回调。 9、请你说一说虚拟内存与物理内存 1. 物理内存 以前还没有虚拟内存概念的时候程序寻址用的都是物理地址。程序能寻址的范围是有限的这取决于 CPU 的地址线条数。比如在 32 位平台下寻址的范围是 2^32 也就是 4G。并且这是固定的如果没有虚拟内存且每次开启一个进程都给 4G 物理内存就可能会出现很多问题 - 因为物理内存是有限的当有多个进程要执行的时候都要给 4G 内存很显然内存不够这很快就分配完了于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后再将等待的进程装入内存。这种频繁的装入内存的操作效率很低 - 由于指令都是直接访问物理内存的那么任何进程都可以修改其他进程的数据甚至会修改内核地址空间的数据这是不安全的 2. 虚拟内存 由于物理内存有很多问题所以出现了虚拟内存。虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存一个连续完整的地址空间而实际上它通常是被分隔成多个物理内存碎片还有部分暂时存储在外部磁盘存储器上在需要时进行数据交换。 10、请你介绍一下死锁产生的必要条件产生的原因怎么预防死锁 死锁两个或几个进程在运行时由于资源争夺处于互相等待的过程如无外力干涉它们都不会有改变。 产生的原因系统资源不足、资源分配不合理、进程运行推进方式不合理 必要条件 互斥条件——一个资源每次只能给一个进程使用 请求与保持条件——一个进程在请求资源时对已获得的资源保持不变 不可剥夺条件——对于已获取资源的进程不可强行剥夺其资源 循环等待条件——若干进程处于一种头尾相接的循环等待的过程 11、请你说说条件变量 条件变量是线程同步的一种方式这种方式下有两种状态的线程等待条件变量成立而挂起的线程和条件变量成立。为了避免竞争所以条件变量总是和互斥锁一起使用。 条件变量可以以原子的方式阻塞线程直到满足条件变量为真为止。 条件变量为假时线程阻塞并以原子方式释放等待条件变化的互斥锁。当另一个线程条件改变时该线程可能会向相关原子变量发出信号于是几个处于等待的线程将会唤醒获取互斥锁然后评估条件。
http://www.hkea.cn/news/14464267/

相关文章:

  • 专业网站建设公江苏搜索引擎优化
  • asp网站模板免费下载sem论坛
  • 网站开发与设计实训报告摘要山东省城乡与住房建设厅网站
  • 做食品网站用什么颜色官方网站模板
  • 陈村建网站网站建设工作 方案
  • 网博士自助建站系统下载wordpress自定义搜索框
  • 苗木网站模版网页制作公司介绍图片
  • 如何查找织梦网站后台判断管理员wordpress
  • 虚拟机做局域网网站服务器配置自媒体做什么领域比较好
  • 交流网站建设项目背景图片在线制作编辑
  • 自己电脑做网站 带宽博客园网站开发
  • 菠菜网站怎么做推广官方建网站有哪些步骤
  • 长春个人网站制作公司重庆必去的十大景点
  • 网站建设的标语做设计需要素材的常用网站
  • c 2015 做网站app定制公司哪家好
  • 大兴网站建设优化seo怎么制作免费的企业网站
  • 广州花都区网站建设建设金融网站哪家好
  • 百度怎么注册自己的网站游戏优化大师下载安装
  • 哈尔滨网站制作建设多少钱怎么优化网站源码关键词
  • 包装设计征集网站千图网素材图
  • 医药行业网站建设铁路建设单位网站
  • 织梦php网站wordpress手机版app导航
  • 用kid做教育网站域名百度账号注册
  • 广州商城建站苏州大学网站建设
  • 网站仿做利用云服务器做网站
  • 简述网站的建设流程图做电商网站就业岗位晋升
  • 沧州市网站建设公司亚马逊海外购
  • 如何建立网站做微商低价网站建设多少钱
  • 自己怎么来建设网站seo推广小分享
  • 哈德网站建设建筑工程网格化管理考核管理办法